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的@property装饰器的用法
Apr 28 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
python的turtle库使用详解
May 10 Python
如何使用python进行pdf文件分割
Nov 11 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
python将dict中的unicode打印成中文实例
May 11 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
python 常见的反爬虫策略
Sep 27 Python
Django中使用Celery的方法步骤
Dec 07 Python
python中scipy.stats产生随机数实例讲解
Feb 19 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP生成月历代码
2007/06/14 PHP
php实现图片添加水印功能
2014/02/13 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
php短信接口代码
2016/05/13 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
详解angular笔记路由之angular-router
2017/09/12 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python3爬虫全国地址信息
2019/01/05 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
学生会竞选演讲稿
2014/04/24 职场文书
核心价值观演讲稿
2014/05/13 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
2014年司法所工作总结
2014/11/22 职场文书
学校社团活动总结
2015/05/07 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
尝试使用Python爬取城市租房信息
2022/04/12 Python
Docker安装MySql8并远程访问的实现
2022/07/07 Servers