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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python中每次处理一个字符的5种方法
May 21 Python
python基础知识小结之集合
Nov 25 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
python抓取网页中链接的静态图片
Jan 29 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
Django框架models使用group by详解
Mar 11 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
flask开启多线程的具体方法
Aug 02 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
python中的random模块和相关函数详解
Apr 22 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删除文本文件中重复行的方法
2015/04/28 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python中sets模块的用法实例
2014/09/30 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python语法快速入门指南
2015/10/12 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
车祸赔偿收入证明
2014/01/09 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
信用卡工资证明范本
2014/10/17 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP
python自动化测试之Selenium详解
2022/03/13 Python
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python