PyQt5+Qt Designer如何实现不同对话框之间调用?

在学习PyQt5+Qt Designer过程中,在QInputDialog对话框中或QMessageBox消息框中,点击按钮Button都会自动弹出一个对话框,这些对话框都是系统自带的,现在我们需要自定义一个“弹出对话框”,参考了网上一些例子,可使用代码编写的形式创建主窗口和子窗口,然后经过信号和槽函数调用来实现,具体实例可参考:
1、各位大神,求问pyqt5如何实现点击一个按钮跳出另一个窗口?
https://bbs.csdn.net/topics/390965991 此论坛中有几个很好的例子。
2、【知乎网】https://zhuanlan.zhihu.com/p/30152208


但是对于复杂一点的应用系统,完全使用代码编写太不现实,则需要使用快捷的创建方法,即使用Qt Designer创建主窗口和子窗口(被调用窗口),这时如何实现它们之间的调用?

下面给出它们之间的调用方法:
工具:PyQt5+Qt designer + Pycharm
步骤:

  1. 使用Qt designer创建所有需要的对话框;
  2. 将其所有对话框都保存到指定目录下,并命名为MainDialog.ui 和SubDialog.ui;
  3. 使用Pycharm中的PyUIC工具(不知道的可自己到网上查找)将其MainDialog.ui 和SubDialog.ui转为MainDialog.py和SubDialog.py;并编译通过;
  4. 在Pycharm中新建一个Python File,命名为MyDialogCall.py,在文件中添加如下代码实现调用功能:
from PyQt5.QtWidgets import *
import sys
from MyMainDialog import Ui_Dialog
from mySubDialog import Ui_Dialog2

class SubDialog(QDialog,Ui_Dialog2):
    def __init__(self):
        super(SubDialog,self).__init__()
        self.setupUi2(self)
        self.setWindowTitle("自定义消息对话框:登录窗口")

class MainDialog(QDialog,Ui_Dialog):
    def __init__(self):
        super(MessageDialog,self).__init__()
        self.setupUi(self)
        self.setWindowTitle("消息对话框实验")
        self.pushButton.clicked.connect(self.slotcalldialog)
    def slotcalldialog(self): #调用其他自定义消息框
        self.newDialog=SubDialog()
        self.newDialog.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = MainDialog()
    main.show()
    sys.exit(app.exec_())

PyQt5+Qt Designer如何实现不同对话框之间调用?_第1张图片

【图说明】
1)主对话框定义为消息框,其中一个按钮Other Infor可调用自定义对话框,(各位可创建一个简单的窗口就一个按钮即可),
2)在第3步中,MainDialog.py和SubDialog.py两个文件中的类名都一样,都是如下形式:

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        .......................
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):

为了在MyDialogCall.py文件中引用时不产生歧义,将子窗口文件SubDialog.py对应的类名改为
from MyMainDialog import Ui_Dialog
from mySubDialog import Ui_Dialog2

class Ui_Dialog2(object):
    def setupUi2(self, Dialog):
        .......................
        self.retranslateUi2(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi2(self, Dialog):

你可能感兴趣的:(PyQt5,GUI设计)