pyqt 多窗口之间的相互调用方法


Posted in Python onJune 19, 2019

* 在编程开发中,一个程序不可避免的需要多窗口操作来实现具体的功能。

实现此功能的基本步骤(以三个窗口为例,使用主窗口调用其它两个窗口)

# 主窗口
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow(object):
  def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(800, 600)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
 
    self.pushButton = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(70, 180, 75, 23))
    self.pushButton.setObjectName("pushButton")
 
    self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_2.setGeometry(QtCore.QRect(250, 180, 75, 23))
    self.pushButton_2.setObjectName("pushButton_2")
 
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    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", "打开窗口1"))
    self.pushButton_2.setText(_translate("MainWindow", "打开窗口2 "))
 
# 窗口1
class Ui_Dialog(object):
  def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(400, 300)
    self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
    self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
    self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
    self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
    self.buttonBox.setObjectName("buttonBox")
    self.label = QtWidgets.QLabel(Dialog)
    self.label.setGeometry(QtCore.QRect(140, 100, 54, 12))
    self.label.setObjectName("label")
 
    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", "Dialog"))
    self.label.setText(_translate("Dialog", "这是窗口1"))
# 窗口2
 
class Ui_Form(object):
  def setupUi(self, Form):
    Form.setObjectName("Form")
    Form.resize(400, 300)
    self.label = QtWidgets.QLabel(Form)
    self.label.setGeometry(QtCore.QRect(140, 140, 54, 12))
    self.label.setObjectName("label")
 
    self.retranslateUi(Form)
    QtCore.QMetaObject.connectSlotsByName(Form)
 
  def retranslateUi(self, Form):
    _translate = QtCore.QCoreApplication.translate
    Form.setWindowTitle(_translate("Form", "Form"))
    self.label.setText(_translate("Form", "这是窗口2"))

主程序入口:

# 主程序
class MainWindow(QMainWindow, untitled.Ui_MainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()
    self.setupUi(self)
    self.window2 = Ui_Dialog()
    self.window2.setupUi()
    self.window3 = Ui_Form()
    self.window3.setupUi()
    self.pushButton.clicked.connect(self.window2.show)# 绑定窗口2 
    self.pushButton_2.clicked.connect(self.window3.show) # 绑定窗口3
 
 
if __name__ == '__main__':
  app = QApplication(sys.argv)
  MainWindow = MainWindow()
  MainWindow.show()
  sys.exit(app.exec_())

以上实现主窗口通过按钮弹出窗口1和窗口2

下面实现通过窗口按钮打开文件资源管理器,实现获取文件相关信息的功能:

1. 在主窗口中添加一个按钮:

class Ui_MainWindow(object):
  def setupUi(self, MainWindow):
    ......
    self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_3.setGeometry(QtCore.QRect(420, 180, 75, 23))
    self.pushButton_3.setObjectName("pushButton_3")
  def retranslateUi(self, MainWindow):
    ......
    self.pushButton_3.setText(_translate("MainWindow", "打开目录"))

2.主程序中添加:

# 主程序
class MainWindow(QMainWindow, untitled.Ui_MainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()
    self.setupUi(self)
    self.window2 = Ui_Dialog()
    self.Window2.setupUi()
    self.window3 = Ui_Form()
    self.Window3.setupUi()
    self.pushButton.clicked.connect(self.window2.show)# 绑定窗口2 
    self.pushButton_2.clicked.connect(self.window3.show) # 绑定窗口3
 
    self.pushButton_3.clicked.connect(self.gefilename) # 新增加的
  # 新增加的
  def gefilename(self):
    filename = QFileDialog.getOpenFileName()
    return filename
 
 
if __name__ == '__main__':
  app = QApplication(sys.argv)
  MainWindow = MainWindow()
  MainWindow.show()
  sys.exit(app.exec_())

即可完成上述功能。

以上这篇pyqt 多窗口之间的相互调用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用Supervisor来管理进程的方法
May 28 Python
Python实现建立SSH连接的方法
Jun 03 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
python交互式图形编程实例(一)
Nov 17 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
tensorflow实现加载mnist数据集
Sep 08 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
如何使用repr调试python程序
Feb 28 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
基于python实现计算两组数据P值
Jul 10 Python
Pytorch 实现变量类型转换
May 17 Python
pyqt5 实现多窗口跳转的方法
Jun 19 #Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 #Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 #Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 #Python
Python发展史及网络爬虫
Jun 19 #Python
Python QQBot库的QQ聊天机器人
Jun 19 #Python
python替换字符串中的子串图文步骤
Jun 19 #Python
You might like
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python中的变量和作用域详解
2016/07/13 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
django迁移数据库错误问题解决
2019/07/29 Python
python 负数取模运算实例
2020/06/03 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
Python实现微信表情包炸群功能
2021/01/28 Python
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
销售文员的岗位职责
2013/11/20 职场文书
经销商培训邀请函
2014/01/21 职场文书
大学生新学期计划书
2014/04/28 职场文书
学习经验演讲稿
2014/05/10 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书