PyQt - 如何使用 class link 特定对话框

PyQt - How to link specific dialog with class

我创建了一个 PyQt MainWindow 应用程序,还在 PyQt 设计器中创建了 2 个 PyQt 对话框,然后是一个 "calling" .pyw 程序,问题是当我尝试打开不同的对话框时,它只打开一个对话框。

我如何显式 set/link 对话 class:

import sys
from MainApp import *
from Dialog1 import *
from Dialog2 import *
from PyQt4 import Qt, QtGui


class MyForm(QtGui.QMainWindow):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.pushButton1, QtCore.SIGNAL('clicked()'), self.openDialog1)
        QtCore.QObject.connect(self.ui.pushButton2, QtCore.SIGNAL('clicked()'), self.openDialog2)    


    def openDialog1(self):
        editDialog = Dialog1()
        editDialog.exec_()

    def openDialog2(self):
        editDialog = Dialog2()
        editDialog.exec_()        



class Dialog1(QtGui.QDialog):
    isEdit = False
    def __init__(self, studentId=0, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

class Dialog2(QtGui.QDialog):
    isEdit = False
    def __init__(self, studentId=0, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

默认加载 Dialog2,如果我注释掉这一行:

from Dialog2 import **

然后它加载 Dialog1,我想明确设置它加载哪个对话框

Github link

您的导入:

from Dialog1 import *
from Dialog2 import *

相当于:

from Dialog1 import Ui_Dialog
from Dialog2 import Ui_Dialog

所以最后Ui_Dialog会参考Dialog2.py的设计,所以只显示第二种形式

解决方案是区分两个导入,为此您可以使用:as

import sys
from MainApp import *
from Dialog1 import Ui_Dialog as Ui_Dialog1 # change this line
from Dialog2 import Ui_Dialog as Ui_Dialog2 # change this line
from PyQt4 import Qt, QtGui


class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        [...]


    def openDialog1(self):
        editDialog = Dialog1()
        editDialog.exec_()

    def openDialog2(self):
        editDialog = Dialog2()
        editDialog.exec_()


class Dialog1(QtGui.QDialog):
    isEdit = False
    def __init__(self, studentId=0, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog1() # change this line
        self.ui.setupUi(self)

class Dialog2(QtGui.QDialog):
    isEdit = False
    def __init__(self, studentId=0, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog2() # change this line
        self.ui.setupUi(self)