我有一个简单的PyQt4示例 运行时,它会显示带有按钮的QMainWindow。 如果单击该按钮,则会创建第二个QMainWindow。 如果再次单击它,则会获得2秒窗口。
在此示例中,防止超过1秒窗口的优雅且简单的方法是什么?
import sys
from PyQt4.QtGui import *
class win2(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self,parent)
layout = QVBoxLayout()
label = QLabel(self)
label.setText('This is win2')
layout.addWidget(label)
self.adjustSize()
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
layout = QVBoxLayout()
button1 = QPushButton("win2", self)
layout.addWidget(button1)
button1.clicked.connect(self.showwin2)
def showwin2(self):
w2 = win2(self)
w2.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
答案 0 :(得分:0)
每次按下按钮时,您的函数都会创建类win2的新实例。要禁止此行为,只需调用show和raise_函数,而不是创建新实例。
我会按如下方式创建类,只使用按钮“显示”窗口。经过测试并按预期工作。在分配变量时也要考虑使用self,以便可以在整个类实例中访问它们。
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
layout = QVBoxLayout()
button1 = QPushButton("win2", self)
layout.addWidget(button1)
button1.clicked.connect(self.showwin2)
self.w2 = win2(self)
def showwin2(self):
self.w2.show()
self.w2.raise_()