当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qtdesigner。我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面。也可以将多个界面连接起来。接下来,我要提供将多个UI链接起来的思路。一:讲解:qtdesigner自动生成的代码是怎样运行的:(一)组成qtdesinger自动生成的代码为一个对象和对象启动命令,(如何将.ui文件生成.py文件查看:https://blog.csdn.net/qq_37193537/article/details/82080285)对象中包含两个函数,setupUi()和retranslateUi()。两个函数负责绘制Ui,其中setupUI会调用retranslateUi。

使用四个函数,一个主窗口,两个弹出窗口,一个主运行函数。对于所有的窗口都可以通过qtdesigner来设计,之后在主运行函数中来调用。直接运行run函数,即可查看效果。

主窗口:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
################################################
#######创建主窗口
################################################
class FirstMainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('主界面') ###### 创建界面 ######
self.centralwidget = QWidget()
self.setCentralWidget(self.centralwidget)
self.Layout = QVBoxLayout(self.centralwidget) # 设置顶部三个按钮
self.topwidget = QWidget()
self.Layout.addWidget(self.topwidget)
self.buttonLayout = QHBoxLayout(self.topwidget) self.pushButton1 = QPushButton()
self.pushButton1.setText("打开主界面")
self.buttonLayout.addWidget(self.pushButton1) self.pushButton2 = QPushButton()
self.pushButton2.setText("打开对话框")
self.buttonLayout.addWidget(self.pushButton2) self.pushButton3 = QPushButton()
self.pushButton3.setText("打开提示框")
self.buttonLayout.addWidget(self.pushButton3) # 设置中间文本
self.label = QLabel()
self.label.setText("第一个主界面")
self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.label.setAlignment(Qt.AlignCenter)
self.label.setFont(QFont("Roman times", 50, QFont.Bold))
self.Layout.addWidget(self.label) # 设置状态栏
self.statusBar().showMessage("当前用户:mxh") # 窗口最大化
self.showMaximized() ###### 三个按钮事件 ###### self.pushButton3.clicked.connect(self.on_pushButton3_clicked) # 按钮三:打开提示框
def on_pushButton3_clicked(self):
QMessageBox.information(self, "提示", "这是information框!")
#QMessageBox.question(self, "提示", "这是question框!")
#QMessageBox.warning(self, "提示", "这是warning框!")
#QMessageBox.about(self, "提示", "这是about框!") ################################################
#######程序入门
################################################
if __name__ == "__main__":
app = QApplication(sys.argv)
the_mainwindow = FirstMainWindow()
the_mainwindow.show()
sys.exit(app.exec_())

main_window

第一个弹出窗口:

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog1(object):
def setupUi1(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)
Dialog1 = QtWidgets.QDialog()
ui = Ui_Dialog1()
ui.setupUi1(Dialog1)
Dialog1.show()
sys.exit(app.exec_())

Ui_one

第二个弹出窗口:

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog2(object):
def setupUi2(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", "作者:maxiaohui"))
self.email.setText(_translate("Dialog", "联系邮箱:1715338780@xxx.com"))
self.github.setText(_translate("Dialog", "github: https://github.com/xxx"))
self.GPL.setText(_translate("Dialog", "本软件遵循GPL v2协议"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog2 = QtWidgets.QDialog()
ui2 = Ui_Dialog2()
ui2.setupUi2(Dialog2)
Dialog2.show()
sys.exit(app.exec_())

Ui_two

主运行函数:

# coding:utf-8
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from pyqt5_work.GUI_more.main_window import FirstMainWindow
from pyqt5_work.GUI_more.Ui_one import Ui_Dialog1
from pyqt5_work.GUI_more.Ui_two import Ui_Dialog2 # part 1
# 实例化启动qt应用
app = QtWidgets.QApplication(sys.argv)
# 取得UI class 的实例
the_mainwindow = FirstMainWindow() # part 2 登录mysql
Dialog1 = QtWidgets.QDialog()
ui1 = Ui_Dialog1()
ui1.setupUi1(Dialog1)
# part 3 关于界面
Dialog2 = QtWidgets.QDialog()
ui2 = Ui_Dialog2()
ui2.setupUi2(Dialog2) # part 4
# 设计信号-槽点
# 建立对象实例化的访问
bttn = the_mainwindow.pushButton1
bttn.clicked.connect(Dialog1.show) bttn2 = the_mainwindow.pushButton2
bttn2.clicked.connect(Dialog2.show) if __name__ == "__main__":
# 展示主窗口 chenSpider
the_mainwindow.show()
sys.exit(app.exec_())

run


另外还查看了另外一种方式,所有的窗口和函数都在一个函数当中(函数直接运行即可查看效果)

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
################################################
#######创建主窗口
################################################
class FirstMainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('主界面') ###### 创建界面 ######
self.centralwidget = QWidget()
self.setCentralWidget(self.centralwidget)
self.Layout = QVBoxLayout(self.centralwidget) # 设置顶部三个按钮
self.topwidget = QWidget()
self.Layout.addWidget(self.topwidget)
self.buttonLayout = QHBoxLayout(self.topwidget) self.pushButton1 = QPushButton()
self.pushButton1.setText("打开主界面")
self.buttonLayout.addWidget(self.pushButton1) self.pushButton2 = QPushButton()
self.pushButton2.setText("打开对话框")
self.buttonLayout.addWidget(self.pushButton2) self.pushButton3 = QPushButton()
self.pushButton3.setText("打开提示框")
self.buttonLayout.addWidget(self.pushButton3) # 设置中间文本
self.label = QLabel()
self.label.setText("第一个主界面")
self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.label.setAlignment(Qt.AlignCenter)
self.label.setFont(QFont("Roman times", 50, QFont.Bold))
self.Layout.addWidget(self.label) # 设置状态栏
self.statusBar().showMessage("当前用户:一心狮") # 窗口最大化
self.showMaximized() ###### 三个按钮事件 ######
self.pushButton1.clicked.connect(self.on_pushButton1_clicked)
self.pushButton2.clicked.connect(self.on_pushButton2_clicked)
self.pushButton3.clicked.connect(self.on_pushButton3_clicked) # 按钮一:打开主界面
windowList = []
def on_pushButton1_clicked(self):
the_window =SecondWindow()
self.windowList.append(the_window) ##注:没有这句,是不打开另一个主界面的!
self.close()
the_window.show() # 按钮二:打开对话框
def on_pushButton2_clicked(self):
the_dialog = demoDialog_t()
if the_dialog.exec_() == QDialog.Accepted:
pass # 按钮三:打开提示框
def on_pushButton3_clicked(self):
QMessageBox.information(self, "提示", "这是information框!")
#QMessageBox.question(self, "提示", "这是question框!")
#QMessageBox.warning(self, "提示", "这是warning框!")
#QMessageBox.about(self, "提示", "这是about框!") ################################################
#######第二个主界面
################################################
class SecondWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('第二主界面') # 设置中间文本
self.label = QLabel()
self.label.setText("第二个主界面")
self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.label.setAlignment(Qt.AlignCenter)
self.label.setFont(QFont("Roman times", 50, QFont.Bold))
self.setCentralWidget(self.label) # 设置状态栏
self.statusBar().showMessage("当前用户:一心狮") # 窗口最大化
self.showMaximized() ###### 重写关闭事件,回到第一界面
windowList = []
def closeEvent(self, event):
the_window = FirstMainWindow()
self.windowList.append(the_window) ##注:没有这句,是不打开另一个主界面的!
the_window.show()
event.accept() ################################################
#######对话框
################################################
class demoDialog_t(QDialog):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('对话框') ### 设置对话框类型
self.setWindowFlags(Qt.Tool) ################################################
#######程序入门
################################################
if __name__ == "__main__":
app = QApplication(sys.argv)
the_mainwindow = FirstMainWindow()
the_mainwindow.show()
sys.exit(app.exec_())

参考:

https://www.aliyun.com/jiaocheng/522668.html

https://blog.csdn.net/qq_20265805/article/details/82153143

pyqt5通过qt designer 设计方式连接多个UI图形界面的更多相关文章

  1. pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面

    当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer. 我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面.也可以将多个界 ...

  2. 使用 PySide2 开发 Maya 插件系列一:QT Designer 设计GUI, pyside-uic 把 .ui 文件转为 .py 文件

    使用 PySide2 开发 Maya 插件系列一:QT Designer 设计GUI, pyside-uic 把 .ui 文件转为 .py 文件 前期准备: 安装 python:https://www ...

  3. pyqt5对用qt designer设计的窗体实现弹出子窗口的示例

    pyqt5对用qt designer设计的窗体实现弹出子窗口的示例 脚本专栏 python 1. 用qt designer编写主窗体,窗体类型是MainWindow,空白窗口上一个按钮.并转换成mai ...

  4. Qt Designer设计 UI 文件并调用

    本文介绍的是Qt Designer设计 UI 文件并调用,在坛子里逛了一圈,关于UI方面的好像不怎多,本篇给大家分享一下. AD: 2013云计算架构师峰会超低价抢票中 Qt Designer设计 U ...

  5. Win10安装PyQt5与Qt Designer【转】

    https://blog.csdn.net/u011342224/article/details/78879633 1.直接在cmd中通过pip安装PyQt5 1 pip install pyqt5 ...

  6. Win10安装PyQt5与Qt Designer

    1.直接在cmd中通过pip安装PyQt5 1 pip install pyqt5 会自动下载PyQt5以及sip并安装,因为PyQt5不再提供Qt Designer等工具,所以需要再安装pyqt5- ...

  7. python的部分GUI模块简介tkinter、pyqt5(Qt Designer)

    笔者认为,这两个作为Python3较为常用且简单的GUI模块,是Python开发者所必须学习至少是了解的. 其中tkinter为Python3自带的GUI模块,而pyqt5则需要通过pip insta ...

  8. VS2015+QT环境配置后,Lauch Qt Designer打开失败,无法打开*.ui文件

    最近在VS2015上配置QT时出现了这个问题,遂百度其解决方法,解决之后记录下来.第一步: 在[解决方案资源管理器]中,右击你的 xxx.ui文件,选择[打开方式],此时列表中默认值是[ Qt des ...

  9. suse下静默方式安装oracle(无图形界面)

    以 http://www.cnblogs.com/0201zcr/p/4728241.html 为主 以 http://www.cnblogs.com/jyzhao/p/5001782.html 为参 ...

随机推荐

  1. 向jsp页面传值时出现乱码

    在一个html页面中用表单向jsp页面传值: 这是html页面 <html> <head> <title>MyBeans.html</title> &l ...

  2. 【C++ Primer】详解C++和C中的float中的有效数字

    在<C++ Primer>第二章中,2.1.1讲到float型的最小尺寸是6位有效数字.这里对“有效数字”的概念产生疑问,故有了以下内容.        首先,float的“尺寸”的意思是 ...

  3. SQL-MySQL使用教程-对MySQL的初步尝试

    出现问题:中文无法显示.存储:不对任何数据做检测,只管理数据类型.

  4. Android(java)学习笔记3:线程的优先级

    1. Java线程的优先级从1到10级别,值越大优先级越高线程默认优先级是5.值越大优先级越高 (1) 继承自Thread类创建线程类: package cn.itcast_04; public cl ...

  5. [APIO/CTSC 2007]数据备份

    嘟嘟嘟 这竟然是一道贪心题,然而我在不看题解之前一直以为是dp. 首先最优的配对一定是相邻两个建筑物配对,所以我们求出差分数组,就变成了在n - 1个数中选出不相邻的k个数,使这k个数的和最小. 贪心 ...

  6. HDU 1045 Fire Net 【连通块的压缩 二分图匹配】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)    ...

  7. MVC学习三:Razor视图引擎

    1.Razor视图引擎,主要是把View的HTML代码编译到View视图类对象中

  8. MVC学习二:Controller和View关系

    控制器(Controller)主要是定义方法和加载视图(View) 1.控制器中的Action方法返回值的类型ActionResult,string 2.控制器中Action方法接收浏览器参数方式: ...

  9. GYM 101550 G.Game Rank(模拟)

    The gaming company Sandstorm is developing an online two player game. You have been asked to impleme ...

  10. Entity Framework 四

    实体框架支持三种类型的查询:1)LINQ to Entities,2)Entity SQL,3)Native SQL LINQ方法语法: LINQ查询语法: 实体SQL: 这种可以简单的了解,不必深入 ...