PYQT5开启多个线程和窗口,多线程与多窗口的交互

PYQT5(python)开启多个线程和窗口,多线程与多窗口的交互

每点击一次按钮,弹出一个对话框(子窗口),同时开启一个子线程来执行任务并更新对话框内容,关闭对话框则关闭对应子线程

1. 建立一个简单的主界面和一个自定义对话框

在这里插入图片描述

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(327, 303)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 0, 0, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 1, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 0, 2, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 327, 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)
        self.pushButton.clicked.connect(MainWindow.open_dialog)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate(
  • 23
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
PYQT5中,可以通过多线程和信号来实现多窗口交互。 首先,你需要创建多个窗口。每个窗口可以是一个独立的QWidget或QDialog对象。可以使用QWidget或QDialog类来创建这些窗口。每个窗口都可以有自己的UI设计和逻辑。 然后,你可以使用多线程来处理每个窗口的逻辑。可以使用QThread类来创建和管理线程。你可以在每个线程中处理特定窗口的逻辑和操作。 为了实现多窗口交互,你可以使用信号和槽机制。在每个窗口的类中定义信号,并在需要的时候发送信号。其他窗口可以连接这些信号,并在接收到信号时执行相应的操作。可以使用pyqtSignal来定义信号,并使用emit方法发送信号。 例如,你可以在一个窗口类中定义一个信号,并在另一个窗口类中连接这个信号。当第一个窗口发出这个信号时,第二个窗口就会执行与这个信号关联的槽函数。 下面是一个简单的例子来说明pyqt5多窗口交互的实现: ```python from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QApplication, QWidget, QPushButton # 定义一个包含信号的类 class Window1(QWidget): signal = pyqtSignal(str) def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("Window 1") self.setGeometry(100, 100, 300, 200) button = QPushButton("Send Signal", self) button.clicked.connect(self.sendSignal) def sendSignal(self): self.signal.emit("Hello from Window 1!") # 定义另一个窗口类 class Window2(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("Window 2") self.setGeometry(500, 100, 300, 200) self.show() # 定义槽函数来接收信号 def receiveSignal(self, message): print("Received Signal:", message) # 创建应用程序并显示窗口 app = QApplication([]) window1 = Window1() window2 = Window2() # 连接信号和槽函数 window1.signal.connect(window2.receiveSignal) window1.show() app.exec_() ``` 在上面的例子中,我们创建了两个窗口类`Window1`和`Window2`。`Window1`类中定义了一个信号`signal`,并在按钮点击事件中发送这个信号。`Window2`类中定义了一个槽函数`receiveSignal`,用于接收来自`Window1`的信号。在主程序中,我们创建了这两个窗口的实例,并将`Window1`的信号连接到`Window2`的槽函数。当`Window1`发出信号时,`Window2`的槽函数会被触发,输出接收到的消息。 通过使用这种方式,你可以实现多个窗口之间的交互,并根据需要发送和接收信号来执行相关操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [PYQT5开启多个线程和窗口,多线程与多窗口交互实例](https://blog.csdn.net/xujianjun229/article/details/118560341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值