Python PyQt5实现主窗口点击弹出子窗口详解
本文详细介绍在Python中使用PyQt5实现点击主窗口按钮弹出子窗口的完整流程。涵盖使用Qt Designer设计两种不同类型的窗口(Main Window与Dialog),通过uic工具转换为Python类,并在驱动脚本中实例化窗口、绑定按钮点击信号与子窗口显示方法,最终实现交互功能。
设计主窗口与子窗口
首先,利用Qt Designer工具设计两个独立的窗口界面:一个作为主窗口,另一个作为子窗口。
![]() |
在Qt Designer中创建窗口时,主窗口应选择“Main Window”模板,而子窗口则应选择“Dialog”模板。
必须确保主窗口和子窗口属于不同的窗口类型,若两者类型相同,程序运行时可能会发生崩溃。
将设计好的窗口分别保存为EyeTracking_main.ui和EyeTracking_process.ui(命名可根据实际项目需求调整,此处沿用示例名称),随后使用uic工具将这些.ui文件转换为对应的.py代码文件。
编写驱动脚本与窗口关联
接下来,编写一个驱动函数(入口脚本)来加载并调用这两个窗口。
主窗口的Python实现文件命名为Eyetracking_main.py。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(954, 530)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.toolButton = QtWidgets.QToolButton(self.centralwidget)
self.toolButton.setGeometry(QtCore.QRect(10, 40, 101, 25)) self.toolButton.setObjectName("toolButton")
...1234567891011
子窗口的Python实现文件命名为Eyetracking_process.py。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(810, 474)
self.label_5 = QtWidgets.QLabel(Dialog)
self.label_5.setGeometry(QtCore.QRect(630, 90, 151, 151))
self.label_5.setObjectName("label_5")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(250, 90, 171, 161))
self.label_2.setObjectName
("label_2")
...12345678910111213
创建一个新的驱动脚本,命名为EyeTracking_ui.py,用于协调主窗口和子窗口的交互。
from Eyetracking_main import *
from Eyetracking_process import *
from PyQt5.QtWidgets import QApplication,QMainWindow,QDialog
import sys
class parentWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.main_ui = Ui_MainWindow()
self.main_ui.setupUi(self)
class childWindow(QDialog):
def __init__(self):
QDialog.__init__(self)
self.child=Ui_Dialog()
self.child.setupUi(self)
if __name__=='__main__':
app=QApplication(sys.argv)
window=parentWindow()
child=childWindow()
#通过toolButton将两个窗体关联
btn=window.main_ui.toolButton
btn.clicked.connect(child.show)
# 显示
window.show()
sys.exit(app.exec_())
为了便于后续对各个窗口进行独立操作,需要将主窗口和子窗口分别封装在parentWindow和childWindow两个自定义类中。这两个类分别继承自QMainWindow和QDialog基类:
class parentWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)#QMainWindow的初始化
self.main_ui = Ui_MainWindow()#主窗口的实例化
self.main_ui.setupUi(self)
class childWindow(QDialog):
def __init__(self):
QDialog.__init__(self)
self.child=Ui_Dialog()#子窗口的实例化
self.child.setupUi(self)
在驱动脚本中,分别创建这两个类的实例,并赋值给变量window和child:
window=parentWindow()
child=childWindow()
通过定义按钮的点击行为,将主窗口中的按钮与子窗口的显示逻辑关联起来:
btn=window.main_ui.toolButton
btn.clicked.connect(child.show)
这行代码表示当按钮被按下时,触发子窗口的显示操作。
运行程序后,如截图所示,当点击“处理眼动数据”按钮时,子窗口将会弹出显示:

总结
以上介绍了在Python中利用PyQt5实现点击主窗口按钮弹出子窗口的具体方法,希望能为读者提供有效的参考。如有任何疑问,欢迎留言讨论,作者将及时回复。感谢大家的支持! 若觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。














