微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让标准线程运行一个函数并在 Python/PyQt5 中填充一个小部件

如何解决如何让标准线程运行一个函数并在 Python/PyQt5 中填充一个小部件

我试图搞砸一些事情,但我无法使用线程创建小部件。 有人可以看看我的测试脚本并告诉我为什么这不起作用吗?

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *

import threading
import time

class Main(QMainWindow):
    def __init__(self):
        super(Main,self).__init__()

        self._build_ui()
        
        main_thread = threading.Thread(target=self.thread_function)
        main_thread.start()

    def thread_function(self):
        i = 0
        while True:
            message = "Message number: {}".format(i)
            print (message)
            self.create_message_widget(message)
            i+=1
            time.sleep(1)

    def create_message_widget(self,message):
        print ("Testing 3")
        self.label = QLabel(self)
        self.label.setText(message)
        self.verticalLayout.addWidget(self.label)

    def _build_ui(self):
        self.setwindowTitle("Testing Window")
        
        # set the central widget and main layout
        self.centralWidget = QWidget(self)
        self.verticalLayout = QVBoxLayout(self)
        self.setCentralWidget(self.centralWidget)
        self.centralWidget.setLayout(self.verticalLayout)
        
        self.button = QPushButton("Run")
        self.button.clicked.connect(lambda: self.create_message_widget("Testing 1"))
        
        # adding widgets to the window
        self.verticalLayout.addWidget(self.button)
        
        self.create_message_widget("Testing 2")
        self.create_message_widget("Testing 2")
        self.create_message_widget("Testing 2")

        # show main window
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Main()
    sys.exit(app.exec()) 

以下脚本显示了我很少执行 Testing X 的 3 个函数。 您可以注意到 Testing 2 创建得很好。 当我们点击按钮时,我们可以看到 Testing 1 由按钮按下填充。

thread_function 中,我调用 create_message_widget 函数,我认为它应该每 1 秒自动创建一次小部件,但它没有做任何事情。有人可以解释为什么以及这是否可以使它起作用吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。