本文涉及:PyQt5,Qt Designer,PyCharm
**先看下完成效果: **
视频里我只设计了1个主窗口和1个子窗口,不管你需要多少个子窗口,其创建方法都是一样的。下面我来介绍一下具体的实现方式。
步骤1:用Qt Designer创建2个窗体
打开Qt Designer,直接一次性新建2个Main Window窗体,然后在主窗体的中间我放了1个按钮控件,如下图所示:
然后分别保存2个窗体的.ui文件到同1个文件夹中。注意:在保存时,需要分别将鼠标焦点定位到要保存的窗体上,单独为每个窗体进行保存;而在将.ui文件转化为.py文件时,也需要分别选中每个.ui文件,单独进行转换,完成后如下图所示:
步骤2:将子窗体和主窗体上的按钮控件进行关联
首先看一下untitled2.py文件,在自动转换后的代码中,默认继承object类,代码如下:
class Ui_MainWindow(object):
为了执行窗口操作,需要将继承的object类修改为QMainWindow类,由于QMainWindow类位于PyQt5.QtWidgets模块中,因此需要进行导入,修改后的代码如下:
from PyQt5.QtWidgets import QMainWindow
class Ui_MainWindow(QMainWindow):
修改完子窗体的.py文件中的继承类之后,打开untitled.py主窗体文件,在该文件中,首先定义一个槽函数,用来使用QMainWindow对象的show()方法打开子窗体,代码如下:
def open(self): # 创建1个自定义函数open打开子窗体
import untitled2 # 导入子窗体
self.second = untitled2.Ui_MainWindow() # 引用子窗体,并命名为second
self.second.resize(736, 467) # 初始化子窗体大小
self.second.setWindowTitle("这是子窗体") # 初始化子窗体的标题
self.second.show() # 显示子窗体
然后将PushButton按钮的clicked()信号与自定义的槽函数open()关联,代码如下:
self.pushButton.clicked.connect(self.open)
运行untitled.py主窗体,点击按钮即可打开子窗体。
完整代码
有不清楚的,可以对照下面源码看一下。
**主窗体源码(untitled.py):**
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(750, 500)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(190, 140, 291, 81))
self.pushButton.setObjectName("pushButton")
# 将按钮和显示第2个窗口的自定义函数关联
self.pushButton.clicked.connect(self.open)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "打开新窗口"))
def open(self): # 创建1个自定义函数open打开子窗体
import untitled2 # 导入子窗体
self.second = untitled2.Ui_MainWindow() # 引用子窗体,并命名为second
self.second.resize(736, 467) # 初始化子窗体大小
self.second.setWindowTitle("这是子窗体") # 初始化子窗体的标题
self.second.show() # 显示子窗体
import sys
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
**子窗体源码(untitled2.py):**
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow
class Ui_MainWindow(QMainWindow):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(736, 467)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.setupUi(self)
天冷手寒,码文不易,还望各位看官老爷点一下关注,妾身感激涕零 ~~~
本文转载自: https://blog.csdn.net/weixin_53989417/article/details/127222824
版权归原作者 喵呜角角 所有, 如有侵权,请联系我们删除。
版权归原作者 喵呜角角 所有, 如有侵权,请联系我们删除。