PPr*_*eus 0 python pyqt pyqt4 qt-designer python-2.7
我正在使用使用 QT Designer 生成的 python 代码。我想通过 MainWindow 上的按钮打开一个新对话。当我使用以下代码时,对话窗口一创建就消失了。我认为这是因为 QDialog 对象在该方法命中 return 语句时被销毁。调用这种对话的正确方法是什么?
def OpenDialogue(self):
DialogueWindow = QtGui.QDialog()
my_dialogue = MyDialogue.Ui_Dialog()
my_dialogue.setupUi(DialogueWindow)
DialogueWindow.show()
return
Run Code Online (Sandbox Code Playgroud)
例如,我应该在定义 MainWindow 的同一位置实例化 DialogueWindow 并将其传递给此方法吗?
MainWindow 构造函数如下:
class Ui_MainWindow(QtGui.QMainWindow, object):
def setupUi(self, MainWindow):
[code]
Run Code Online (Sandbox Code Playgroud)
它的实例化如下:
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = GUI.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
我将分别通过 MainWindow 和 Dialog 模板对 Qt Designer 生成的类调用 Ui_MainWindow 和 Ui_Dialog。那么最好创建 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()
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是exec_()通过在非模态模式下打开窗口来使用
def openDialog(self):
d = Dialog(self)
d.exec_()
Run Code Online (Sandbox Code Playgroud)
注意:不建议修改 Qt Designer 生成的类。