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

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

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

# 主窗口
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 多窗口之间的相互调用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • PyQt5 多窗口连接实例

    前言 之前做过pyqt的一个简单界面,在一个窗口(MainWindow)中实现一些操作:之前嫌麻烦没有去做多窗口和它们的切换功能.最近研究了下窗口的调用和切换. pyqt4和5有很多不同,在参考别人案例的时候走了很多弯路,最后在pyqt5下实现了简洁的多窗口切换为大家参考. 思路 多窗口的切换和显示连接到按钮的信号上再进行show()就行,格式上有别于pyqt4. 一个逻辑比较清晰的解决方案是,使用一个主程序,在其中实例化各个窗口,然后定义它们的显示逻辑即是按钮的槽函数. 格式上稍有不对就会报错

  • PyQT实现多窗口切换

    最近做个软件,用PyQT写的,在实现菜单栏点击弹出新窗口的时候严重被卡壳,发现用WxPython的思想和方式来做完全无法实现.PyQT的中文资料实在是太少了.看了点英文资料和QT的资料,逆推PyQT的实现方法,总算搞定.下面是一个小demo. 主界面的代码如下所示: # -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui from dialog1 import Dialog1 from dialog2 import Dialog2 impo

  • PyQt 实现使窗口中的元素跟随窗口大小的变化而变化

    * 如果要实现这种视觉状态,那么就需要使用布局的方法. 创建一个控件后,在主窗口上右击选择布局(layout) Lay Out Horizontally : 纵向布局 Lay Out Vertically:横向布局 Lay Out Horizontally in Splitter: 纵向分裂式布局 Lay Out Vertically in Splitter:横向分裂式布局 Lay Out in a Grid: 网格布局 Lay Out in a Form Layout:表布局 Break La

  • PyQt5实现从主窗口打开子窗口的方法

    1.在Qt Designer中设计两个简单窗口 2.将.ui文件转换成.py文件 3.新建**.py文件 #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QMainWindow, QApplication from window import Ui_MainWindow from child import Ui_Child import sys class Main(QMainWindow,Ui_MainWindow): def __init_

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

    * 在编程开发中,一个程序不可避免的需要多窗口操作来实现具体的功能. 实现此功能的基本步骤(以三个窗口为例,使用主窗口调用其它两个窗口) # 主窗口 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600)

  • 关于Iframe父页面与子页面之间的相互调用

    iframe元素就是文档中的文档. window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象.但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口. contentWindow: 是指指定的iframe或者iframe所在的window对象 Demo1 父页面fu.html: <!DOCT

  • Python父目录、子目录的相互调用方法

    最近在使用Python的过程中经常遇到找不到该模块的问题.其中一个就是父目录子目录之间相互调用的情况.下面简单总结下. 我们在F:\Code文件夹下面创建一个test文件夹 而test文件夹里面如下 包含两个子目录 a.py def showdata(): print("this is a") def plus(): a=1 b=2 print(a+b) b.py def show(): print("this is b") 从父目路test.py调用a和b fro

  • layer弹出层父子页面事件相互调用方法

    // 父页面 <body> <a data-url="bbbb.html" id="parentIframe">小小提示层</a> <input id="shuzhi" /> <button class="but_par">父页面</button> </body> <script src="../jquery-1.9.1.min

  • javascript浏览器窗口之间传递数据的方法

    本文实例讲述了javascript浏览器窗口之间传递数据的方法.分享给大家供大家参考.具体分析如下: 摘要: 在项目开发中我们经常会遇到弹窗,有的是通过div模拟弹窗效果,有的是通过iframe,也有通过window自带的open函数打开一个新的窗口.今天给大家分享的是最后一种通过window.open()函数打开页面进行数据交互.首先看下效果图: 原理: 父窗口给子窗口传递数据是通过url的参数传递过去,子窗口给父窗口传递数据是通过父窗口的全局函数传递. 代码: index.html如下: 复

  • 详解layui弹窗父子窗口之间传参数的方法

    本文介绍了layui弹窗父子窗口之间传参数的方法,分享给大家,具体如下: 1.父页面打开子页面并向子页面传参数 function setChooseValues(ret){ var oView = document.getElementById("userName"); var oValue = document.getElementById("userIds"); var i = 0; if( ret != null){ oValue.value="&q

  • 在Python 不同级目录之间模块的调用方法

    Python的模块有自带的也有第三方,还可以自定义然后引用 1.调用自带的模块,例如,sys 调用自带的模块只需要import sys 引入既可以使用 2.第三方的需要先安装模块然后再import引入 3.自定义: (1)同级目录模块的调用 test -----t1.py -----t2.py -----test1 -----------testm.py -----test2 -----------testmm.py t1.py要调用t2.py中的模块: import t2 t2.func()

  • 原生实现C#与Lua相互调用方法(Unity3D可用)

    目录 引言 一.编译Lua动态链接库 1. 编译Windows下使用的DLL文件 2. 编译Android下使用的SO文件 二.编写C#使用的API 1. 动态链接库在Unity中的存放位置. 2. 编写C#的API[LuaDll.cs] 3.需要注意的几个地方 三.C#与Lua的相互调用举例 1. C#中创建Lua环境 2. 加载Lua代码并执行,调用Lua的函数及向Lua传递参数. 3. 将C#函数提供给Lua使用,需要使用静态方法参考上面LuaFunction的定义. 4. Lua代码调用

  • C语言与Lua之间的相互调用详解

    前言 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的. lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循了机制与策略分离的原则.在lua中调用C函数可以提高程序的运行效率.lua与C的相互调用在工程中相当实

  • 如何实现springboot中controller之间的相互调用

    springboot controller之间相互调用 SpringBoot之间内部调用 @Autowired private RestTemplate restTemplate ;//自动装配restTemplate -------------------返回json字符串类型---------------------------------- @RequestMapping("/selectHospatal") @ResponseBody public String selectH

随机推荐