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

标签: 对话框调用 自定义对话框创建
34人阅读 评论(0) 收藏 举报
分类:

在学习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_())

结果图:

【图说明】
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):
查看评论

iOS8开发技术(Swift版):SearchBar和对话框

搜索条和对话框(详细内容看目录)
  • 2015年06月18日 21:21

PyQt5学习笔记09----标准文件打开保存框QFileDialog

单个文件打开 QFileDialog.getOpenFileName() 多个文件打开 QFileDialog.getOpenFileNames() 文件夹选取 QFileDialo...
  • a359680405
  • a359680405
  • 2015-04-21 09:37:28
  • 22783

PyQt5教程 - QtDesigner窗口设计工具的使用

http://blog.csdn.net/pipisorry/article/details/45999965 pyqt提供了Qt designer来设计窗口界面,用起来也非常方便,虽然做出来的界面不...
  • pipisorry
  • pipisorry
  • 2015-05-26 01:08:27
  • 30909

PyQt5(4)——控件事件响应与信号槽

事件(Events)是 GUI 程序中很重要的一部分,它由用户操作或系统产生。当我们调用程序的 exec_()方法时,程序就会进入主循环中。主循环捕获事件并将它们发送给相应的对象进行处理。 为此,Qt...
  • xmnathan
  • xmnathan
  • 2016-03-29 15:08:09
  • 5111

PyQt5:关闭窗口(4)

学习《PyQt4入门指南 PDF中文版.pdf 》笔记           一个显而易见的关闭窗口的方式是单击标题栏右上角的X标记。在接下来的示例中,我们将展示如何用代码来关闭程序,并简要介...
  • c3060911030
  • c3060911030
  • 2016-06-01 00:02:47
  • 6823

pyQt不同窗体间的值传递(二)——使用信号槽机制

使用QT编程的精髓就在于信号槽机制的灵活运用,信号和槽机制可以使互不相关的对象绑定在一起,实现对象之间的通信。     QT通过信号槽来传递和相应消息,与windows下消息机制相比,消息机...
  • shawpan
  • shawpan
  • 2015-07-16 20:36:48
  • 4429

PyQt5教程-04-关闭窗口

最简单的关闭一个窗口的方法是点击标题栏上的 x 标志。但是,在下面的例子中,我们将展示如何通过编程来控制关闭窗口。我们将使用PyQt5的信号/槽。以下是我们在例子中使用到的 QPushButton 控...
  • weiaitaowang
  • weiaitaowang
  • 2016-07-30 10:40:56
  • 5106

实现<em>不同窗体间</em>的传值

实现<em>不同窗体间</em>的传值,里面用到了 属性 <em>事件</em>,希望...一般般吧,实例化后<em>调用</em>窗口不是很方便。不过还是可以...<em>PyQt5</em>在主窗口内打开子窗口 pyQt<em>不同窗体间</em>的值传...
  • 2018年04月17日 00:00

PyQt5笔记(02) -- 按钮点击事件

本节主要介绍在一个PyQt窗体内添加一个按钮,鼠标停留在按钮上会出现提示,并在点击按钮时响应一个事件...
  • u014786187
  • u014786187
  • 2017-12-22 19:41:58
  • 341

PyQt5学习笔记:1 基本流程与主窗口

一直沉迷工作,没时间写博客(借口?),最近公司休假,偷得浮生半日闲,把以前在Evernote上保存的笔记都分享出来,发表成博客,以共勉。 首先简单说一下,PyQt目前我用过的最好的GUI库,GT...
  • likai503819723
  • likai503819723
  • 2018-03-13 09:30:55
  • 35
    个人资料
    持之以恒
    等级:
    访问量: 5395
    积分: 324
    排名: 24万+
    文章存档