pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面
当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer。
我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面。也可以将多个界面连接起来。
接下来,我要提供将多个UI链接起来的思路。
一:讲解:qt designer 自动生成的代码是怎样运行的:
(一)组成
qt desinger自动生成的代码为一个对象和对象启动命令,对象中包含两个函数,setupUi()和retranslateUi()。
形如这样:
from ... import ....
class someclassname(object):
def setupUi():
...
def retranslateUi():
...
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
(二)运行方式:
(1)两个函数setupUI和retranslateUi负责绘制Ui,其中setupUI会调用retranslateUi。
(2)if __name__ = "__main__" 及以后的语句是python的主程序运行
app = QtWidgets.QApplication(sys.argv)
......
sys.exit(app.exec_())
上面两句为pyqt主程序运行通用语句
(3)
Dialog = QtWidgets.QDialog() # 获取窗口类型实例
ui = someclassname() # 取得ui的class实例
ui.setupUi(Dialog) # 将ui实例绘制到窗口实例上
(4)
Dialog.show() # 展示窗口
二:如何组合窗口
(一)首先,建立一个主程序的python文件,然后各种import
(1)基本引用
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
(2)文件引用:引用各个Ui的py文件的class
(二)实例化启动qt应用
app = QtWidgets.QApplication(sys.argv)
(三)实例化各种窗口,方式如1.2.3 中的三个语句,例如:
!!!!注意,修改对应相关ui的py文件的变量名函数名避免冲突!!!!!!!
(1)主窗口
ChenSpider = QtWidgets.QMainWindow()
ui = Ui_ChenSpider()
ui.setupUi(ChenSpider)
(2)弹出窗口1
Dialog = QtWidgets.QDialog()
ui2 = Ui_Dialog()
ui2.setupUi2(Dialog)
(3)弹出窗口2
Dialog3 = QtWidgets.QDialog()
ui3 = Ui_Dialog3()
ui3.setupUi3(Dialog3)
(四) 将弹出窗口绑定在主窗口某个按钮上
例子中,将主窗口chenSpider的loginmysqlbttn按钮绑定在窗口1上,aboutbttn绑定在窗口2上,点击弹出
bttn = ui.loginmysqlbttn
bttn.clicked.connect(Dialog.show)
bttn2 = ui.aboutbttn
bttn2.clicked.connect(Dialog3.show)
(五) 启动
if __name__ == "__main__":
ChenSpider.show()
sys.exit(app.exec_())
三:完整代码
(一)主文件(请运行此文件)
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_main_Window import Ui_ChenSpider
from Ui_mysqllogin import Ui_Dialog
from Ui_about import Ui_Dialog3
# part 1
# 实例化启动qt应用
app = QtWidgets.QApplication(sys.argv)
# 将chenSpider设为主窗口实例
ChenSpider = QtWidgets.QMainWindow()
# 取得UI class 的实例
ui = Ui_ChenSpider()
# 将UI 应用到 主窗口 chenSpider 上
ui.setupUi(ChenSpider)
# part 2 登录mysql
Dialog = QtWidgets.QDialog()
ui2 = Ui_Dialog()
ui2.setupUi2(Dialog)
# part 3 关于界面
Dialog3 = QtWidgets.QDialog()
ui3 = Ui_Dialog3()
ui3.setupUi3(Dialog3)
# part 4
# 设计信号-槽点
# 建立对象实例化的访问
bttn = ui.loginmysqlbttn
bttn.clicked.connect(Dialog.show)
bttn2 = ui.aboutbttn
bttn2.clicked.connect(Dialog3.show)
if __name__ == "__main__":
# 展示主窗口 chenSpider
ChenSpider.show()
sys.exit(app.exec_())
(二)主窗口代码
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog3(object):
def setupUi3(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 296)
self.dialogButtonBox = QtWidgets.QDialogButtonBox(Dialog)
self.dialogButtonBox.setGeometry(QtCore.QRect(190, 240, 181, 32))
self.dialogButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.dialogButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.dialogButtonBox.setObjectName("dialogButtonBox")
self.author = QtWidgets.QLabel(Dialog)
self.author.setGeometry(QtCore.QRect(40, 20, 191, 17))
self.author.setObjectName("author")
self.email = QtWidgets.QLabel(Dialog)
self.email.setGeometry(QtCore.QRect(40, 50, 271, 17))
self.email.setObjectName("email")
self.github = QtWidgets.QLabel(Dialog)
self.github.setGeometry(QtCore.QRect(40, 80, 351, 17))
self.github.setObjectName("github")
self.GPL = QtWidgets.QLabel(Dialog)
self.GPL.setGeometry(QtCore.QRect(40, 110, 161, 17))
self.GPL.setObjectName("GPL")
self.retranslateUi(Dialog)
self.dialogButtonBox.accepted.connect(Dialog.accept)
self.dialogButtonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.author.setText(_translate("Dialog", "作者:陈严肃"))
self.email.setText(_translate("Dialog", "联系邮箱:aschenyansu@foxmail.com"))
self.github.setText(_translate("Dialog", "github: https://github.com/chenyansu/pyspidergui"))
self.GPL.setText(_translate("Dialog", "本软件遵循GPL v2协议"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog3 = QtWidgets.QDialog()
ui3 = Ui_Dialog()
ui3.setupUi(Dialog3)
Dialog3.show()
sys.exit(app.exec_())
(三)窗口一:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi2(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(480, 297)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(260, 240, 181, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.hostlnedt = QtWidgets.QLineEdit(Dialog)
self.hostlnedt.setGeometry(QtCore.QRect(120, 20, 113, 27))
self.hostlnedt.setObjectName("hostlnedt")
self.hostlbl = QtWidgets.QLabel(Dialog)
self.hostlbl.setGeometry(QtCore.QRect(20, 26, 81, 21))
self.hostlbl.setObjectName("hostlbl")
self.usernamelbl = QtWidgets.QLabel(Dialog)
self.usernamelbl.setGeometry(QtCore.QRect(20, 90, 51, 17))
self.usernamelbl.setObjectName("usernamelbl")
self.userlnedt = QtWidgets.QLineEdit(Dialog)
self.userlnedt.setGeometry(QtCore.QRect(120, 80, 113, 27))
self.userlnedt.setObjectName("userlnedt")
self.passwdlbl = QtWidgets.QLabel(Dialog)
self.passwdlbl.setGeometry(QtCore.QRect(20, 140, 81, 20))
self.passwdlbl.setObjectName("passwdlbl")
self.passwdlnedit = QtWidgets.QLineEdit(Dialog)
self.passwdlnedit.setGeometry(QtCore.QRect(120, 130, 113, 27))
self.passwdlnedit.setObjectName("passwdlnedit")
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "登陆mysql"))
self.hostlnedt.setText(_translate("Dialog", "localhost"))
self.hostlbl.setText(_translate("Dialog", "HOST地址"))
self.usernamelbl.setText(_translate("Dialog", "用户名"))
self.passwdlbl.setText(_translate("Dialog", "数据库密码"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi2(Dialog)
Dialog.show()
sys.exit(app.exec_())
(四)窗口二:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog3(object):
def setupUi3(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 296)
self.dialogButtonBox = QtWidgets.QDialogButtonBox(Dialog)
self.dialogButtonBox.setGeometry(QtCore.QRect(190, 240, 181, 32))
self.dialogButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.dialogButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.dialogButtonBox.setObjectName("dialogButtonBox")
self.author = QtWidgets.QLabel(Dialog)
self.author.setGeometry(QtCore.QRect(40, 20, 191, 17))
self.author.setObjectName("author")
self.email = QtWidgets.QLabel(Dialog)
self.email.setGeometry(QtCore.QRect(40, 50, 271, 17))
self.email.setObjectName("email")
self.github = QtWidgets.QLabel(Dialog)
self.github.setGeometry(QtCore.QRect(40, 80, 351, 17))
self.github.setObjectName("github")
self.GPL = QtWidgets.QLabel(Dialog)
self.GPL.setGeometry(QtCore.QRect(40, 110, 161, 17))
self.GPL.setObjectName("GPL")
self.retranslateUi(Dialog)
self.dialogButtonBox.accepted.connect(Dialog.accept)
self.dialogButtonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.author.setText(_translate("Dialog", "作者:陈严肃"))
self.email.setText(_translate("Dialog", "联系邮箱:aschenyansu@foxmail.com"))
self.github.setText(_translate("Dialog", "github: https://github.com/chenyansu/pyspidergui"))
self.GPL.setText(_translate("Dialog", "本软件遵循GPL v2协议"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog3 = QtWidgets.QDialog()
ui3 = Ui_Dialog()
ui3.setupUi(Dialog3)
Dialog3.show()
sys.exit(app.exec_())
当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer。
我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面。也可以将多个界面连接起来。
接下来,我要提供将多个UI链接起来的思路。
一:讲解:qt designer 自动生成的代码是怎样运行的:
(一)组成
qt desinger自动生成的代码为一个对象和对象启动命令,对象中包含两个函数,setupUi()和retranslateUi()。
形如这样:
(二)运行方式:
(1)两个函数setupUI和retranslateUi负责绘制Ui,其中setupUI会调用retranslateUi。
(2)if __name__ = "__main__" 及以后的语句是python的主程序运行
app = QtWidgets.QApplication(sys.argv)
......
sys.exit(app.exec_())
上面两句为pyqt主程序运行通用语句
(3)
(4)
二:如何组合窗口
(一)首先,建立一个主程序的python文件,然后各种import
(1)基本引用
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
(2)文件引用:引用各个Ui的py文件的class
(二)实例化启动qt应用
(三)实例化各种窗口,方式如1.2.3 中的三个语句,例如:
!!!!注意,修改对应相关ui的py文件的变量名函数名避免冲突!!!!!!!
(1)主窗口
(2)弹出窗口1
(3)弹出窗口2
(四) 将弹出窗口绑定在主窗口某个按钮上
例子中,将主窗口chenSpider的loginmysqlbttn按钮绑定在窗口1上,aboutbttn绑定在窗口2上,点击弹出
(五) 启动
三:完整代码
(一)主文件(请运行此文件)
(二)主窗口代码
(三)窗口一:
(四)窗口二:
pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面的更多相关文章
- pyqt5通过qt designer 设计方式连接多个UI图形界面
当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qtdesigner.我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面.也可以将多个界面连 ...
- Win10安装PyQt5与Qt Designer【转】
https://blog.csdn.net/u011342224/article/details/78879633 1.直接在cmd中通过pip安装PyQt5 1 pip install pyqt5 ...
- Win10安装PyQt5与Qt Designer
1.直接在cmd中通过pip安装PyQt5 1 pip install pyqt5 会自动下载PyQt5以及sip并安装,因为PyQt5不再提供Qt Designer等工具,所以需要再安装pyqt5- ...
- python的部分GUI模块简介tkinter、pyqt5(Qt Designer)
笔者认为,这两个作为Python3较为常用且简单的GUI模块,是Python开发者所必须学习至少是了解的. 其中tkinter为Python3自带的GUI模块,而pyqt5则需要通过pip insta ...
- 第15.11节 PyQt(Python+Qt)入门学习:Qt Designer(设计师)组件Property Editor(属性编辑)界面中主窗口QMainWindow类相关属性详解
概述 主窗口对象是在新建窗口对象时,选择main window类型的模板时创建的窗口对象,如图: 在属性编辑界面中,主窗口对象与QMainWindow相关的属性包括:iconSize.toolButt ...
- PyQt5 & Qt Designer使用小结
开始在知乎写文章的原因,主要还是想整理平时的经验,方便自己以后查看,有机会的话大家也可以交流吧. 11月中旬由于项目需要,和另一名实习生负责使用Python开发一个数据分析的小软件. 虽然才开始接触Q ...
- 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子
本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...
- 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...
- 利用Eric+Qt Designer编写倒计时时钟
[前言]前几日通过编写命令行通讯录,掌握了Python的基本语法结构,于是开始向更高水平冲击,利用Eric与Qt Designer 编写一个带界面的小程序.本次实操中也确实遇到了不少问题,通过学习也都 ...
随机推荐
- File字节流
1. File f = new File("文件路径") 注意:相对路径:非web项目的相对都是以项目为起点.(src/a/txt(建议) 绝对路径:f: ...
- Xamarin App文件(apk)大小和启动时间的影响因素
Xamarin开发的时候大家都有一个疑问,就是apk文件会不会特别的大,启动会不会很慢.答案是肯定的,文件肯定大,启动肯定会慢,但是具体大多少.具体慢多少,有什么因素可以使apk文件稍微小一点.可以使 ...
- 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述
关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...
- AmpOne
AmpOne 基于Windows平台的Apache .PHP.Mysql 开发环境 | One intergrated tools package of Apache + PHP + MySQL fo ...
- SQL Server各个版本的区别
SQLEXPR_x64_CHS.exe,标准SQL Server Express edition,只有数据库引擎,甚至连图形管理界面都没有.SQLEXPRWT_x64_CHS.exe,多了一个图形管理 ...
- iframe 父页面与子页面之间的方法的相互调用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ecshop 商品分类页 取得当前分类下的子分类方法
ecshop的商品分类页面category.php 下的分类,默认是取得所有同级父分类以及父类别的子分类.比如,我点击进入是A商品分类的页面 category.php?id=1,事实上 我只需要取得父 ...
- Spingmvc项目注册登录图片验证码(比较灵活的验证码)
最近项目中注册模块要加一个图片验证码功能. 写下来记录下. 1:首先用什么实现,我用的servlet. 后台java代码:RandomValidateCode 类 ,这个类是生成随即验证码和干扰线,可 ...
- oracle学习笔记(2)-基本术语
oracle基本术语 先上图. 相当粗糙的一个图,可能有些地方不够精细,大致结构基本是对的. 逻辑结构上从大到小的依次为文件(file)->表空间(tablespace)->段(segme ...
- 理解Hibernate事务机制,首先需要搞清楚的6个问题
问题1:到底该用getTransaction还是beginTransaction? 上图说明的问题: 第1步,调用session.getTransaction()的时候,会创建一个全新的Transac ...