我正在使用QT Designer生成的python代码。我想通过MainWindow上的按钮打开一个新对话框。当我使用以下代码时,对话窗口一旦创建就会消失。我假设这是因为当方法命中return语句时,QDialog对象被销毁。这种对话的正确方法是什么?
def OpenDialogue(self):
DialogueWindow = QtGui.QDialog()
my_dialogue = MyDialogue.Ui_Dialog()
my_dialogue.setupUi(DialogueWindow)
DialogueWindow.show()
return
例如,我应该在我定义MainWindow的同一个地方实例化DialogueWindow并将其传递给此方法吗?
MainWindow构造函数如下:
class Ui_MainWindow(QtGui.QMainWindow, object):
def setupUi(self, MainWindow):
[code]
实例化如下:
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = GUI.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()
答案 0 :(得分:3)
我将分别通过MainWindow和Dialog模板将Ui_MainWindow和Ui_Dialog调用到Qt Designer生成的类中。然后最好创建MainWindow和Dialog实现接口的类。我将pushButton调用到您引用的按钮,然后您必须将父对象传递给对话框对象。
class Ui_Dialog(object):
def setupUi(self, Dialog):
[...]
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
[...]
class Dialog(QtGui.QDialog, Ui_Dialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.openDialog)
def openDialog(self):
d = Dialog(self)
d.show()
另一种解决方案是通过在非模态模式下打开窗口来使用exec_()
def openDialog(self):
d = Dialog(self)
d.exec_()
注意:建议不要修改Qt Designer生成的类。