Python PyQt5实现主窗口点击弹出子窗口详解

晚来风
晚来风
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍在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实现点击主窗口按钮弹出子窗口的具体方法,希望能为读者提供有效的参考。如有任何疑问,欢迎留言讨论,作者将及时回复。感谢大家的支持! 若觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。