python中多个QPushButton响应同一个事件

python中多个QPushButton响应同一个事件
注:在python2 的环境下运行

#! -*- coding:utf-8 -*-
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton
import sys
class WindowDemo(QWidget):
    def __init__(self):
        super(WindowDemo, self).__init__()
        btn1 = QPushButton(u'单一保存', self)
        btn2 = QPushButton(u'连续保存', self)
        btn3 = QPushButton(u'暂停连续保存', self)
        btn1.clicked.connect(self.handle_camsave)
        btn2.clicked.connect(self.handle_camsave)
        btn3.clicked.connect(self.handle_camsave)
        hbox = QHBoxLayout()
        hbox.addWidget(btn1)
        hbox.addWidget(btn2)
        hbox.addWidget(btn3)
        hbox.addStretch(0)
        self.setLayout(hbox)
        self.setWindowTitle("addStretch 例子")
    def handle_camsave(self):

        sender = self.sender()
        clickevent = sender.text()
        if clickevent =
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 PyQt5 UI 界面,如果要将 QPushButton、QGraphicsView 和 QtWidgets 三个控件分为多线程任务,可以通过以下步骤实现: 1. 创建一个 `Worker` 类,该类继承自 `QObject` 类并包含一个 `QThread` 对象。在 `Worker` 类定义一个信号,用于在任务完成时发出。 ```python from PyQt5.QtCore import QObject, QThread, pyqtSignal class Worker(QObject): finished = pyqtSignal() def __init__(self): super().__init__() self.thread = QThread() self.moveToThread(self.thread) self.thread.start() def do_task(self): # 执行任务的代码 self.finished.emit() ``` 2. 在 `QPushButton`、`QGraphicsView` 和 `QtWidgets` 控件的槽函数,创建一个 `Worker` 对象并将其任务添加到 `QThread` 执行。 ```python class MainWindow(QMainWindow): def __init__(self): super().__init__() self.button = QPushButton('Start Task', self) self.button.clicked.connect(self.start_task) self.view = QGraphicsView(self) self.scene = QGraphicsScene(self) self.view.setScene(self.scene) self.label = QLabel('Waiting for task to finish...', self) self.setCentralWidget(self.label) def start_task(self): self.worker = Worker() self.worker.finished.connect(self.task_finished) self.worker.moveToThread(self.worker.thread) self.worker.thread.started.connect(self.worker.do_task) self.worker.thread.finished.connect(self.worker.thread.quit) self.worker.thread.finished.connect(self.worker.deleteLater) def task_finished(self): self.label.setText('Task is finished.') ``` 在上面的示例代码,我们在 `MainWindow` 类的构造函数创建了一个 `QPushButton`、`QGraphicsView` 和 `QtWidgets` 控件,并将它们添加到窗口。在 `start_task` 方法,我们创建了一个 `Worker` 对象并将其与任务完成信号连接。然后,我们将 `Worker` 对象移动到它自己的线程,并连接线程的 `started` 信号到 `worker.do_task` 槽函数。最后,我们连接线程的 `finished` 信号到 `worker.thread.quit` 和 `worker.deleteLater` 槽函数。 在 `task_finished` 方法,我们将标签文本设置为“任务已完成”。 当我们运行这个示例代码时,我们会看到一个窗口出现,其包含一个“开始任务”按钮、一个 `QGraphicsView` 控件和一个标签。点击“开始任务”按钮将会创建一个 `Worker` 对象并将其任务添加到线程执行。当任务完成时,标签文本将会更新为“任务已完成”。在这个过程,我们的应用程序仍然可以响应用户的输入,因为任务正在另一个线程运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值