勤奋的大熊猫 2024-01-23 10:12 采纳率: 100%
浏览 9
已结题

如何在 QLineEditor 中按顺序显示提示信息?

第一个文件中的代码:

from PyQt6.QtCore import Qt, pyqtSlot
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QVBoxLayout, QWidget
from gui_file import YourCalculator
import time


class YourGUI(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setFixedSize(800, 600)
        self.calculator = YourCalculator()

        self.calculator.task_completed.connect(self.on_task_completed)

        button = QPushButton("Start Tasks")
        button.clicked.connect(self.start_tasks)
        button.setFixedSize(200, 20)

        self.line_editor = QLineEdit("hhh")
        self.line_editor.setFixedSize(200, 20)

        widget = QWidget(self)
        widget.setFixedSize(400, 600)

        layout = QVBoxLayout(widget)
        layout.addWidget(button)
        layout.addWidget(self.line_editor)

    def start_tasks(self):
        self.calculator.task1()
        time.sleep(1)
        self.calculator.task2()
        time.sleep(1)
        self.calculator.task3()

    @pyqtSlot(str)
    def on_task_completed(self, message):
        print(message)
        self.line_editor.setText(message)


if __name__ == "__main__":
    app = QApplication([])
    window = YourGUI()
    window.show()
    app.exec()

第二个文件中的代码:

from PyQt6.QtCore import QObject, pyqtSignal


class YourCalculator(QObject):
    task_completed = pyqtSignal(str)

    def task1(self):
        self.task_completed.emit("Task 1 completed")

    def task2(self):
        self.task_completed.emit("Task 2 completed")

    def task3(self):
        self.task_completed.emit("Task 3 completed")

运行第一个文件后的界面:

img


点击按钮后的界面:

img

只有最后的信息会被显示,我想要它能够在 QLineEditor 中连续显示三个提示信,该怎么办呢?

  • 写回答

2条回答 默认 最新

  • hitzsf 2024-01-23 15:16
    关注
    
        def start_tasks(self):
            # 下面两种 任选一个
            # # 1. 使用 定时器的方式 
            QTimer.singleShot(1000,self.calculator.task1)
            QTimer.singleShot(2000,self.calculator.task2)
            QTimer.singleShot(3000,self.calculator.task3)
            
            # # 2. 先让app 处理一些事件,gui更新一般100ms之内能搞定, 再暂停 
            # self.calculator.task1()
            # app.processEvents(QEventLoop.ProcessEventsFlag.AllEvents)
            # time.sleep(1)
            # self.calculator.task2()
            # app.processEvents(QEventLoop.ProcessEventsFlag.AllEvents)
            # time.sleep(1)
            # self.calculator.task3()
    

    用异步的方式, 因为time.sleep 阻塞了当前进程,
    或者 手动触发 app 处理事件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月31日
  • 已采纳回答 1月23日
  • 创建了问题 1月23日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。