pyqt主窗口在从线程接收数据后总是崩溃

2024-05-23 22:44:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QMainWindow,它启动一个QThread并等待来自网络的数据。接收到任何数据时更新UI。在

问题是:它有时会崩溃。有时候没有,我所做的就是启动它并等待数据。在

以下是线程类:

class ListenerThread(QtCore.QThread):

        def __init__(self,host,port,window):
            super(ListenerThread,self).__init__(window)
            self.host = host
            self.port = port
            self.window = window


        def run(self):

            soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            soc.bind((self.host, self.port))

            while True:

            data, address =  soc.recvfrom(9999)
            print address


            if data:



                dataList = data.split("\\")


                company  = dataList[1] 
                projectName = dataList[2]  
                assets = dataList[3]  
                assetType = dataList[4]  
                assetName = dataList[5] 



          # parent here is the main window(the main thread) : updateCombo is a function that updates combo box inside the               main window 

                self.parent().updateCombo(self.window.comboBoxCompany,company)
                self.parent().updateCombo(self.window.dropDownProjects,projectName)

                self.parent().select(assets,assetName)

为什么会这样??请记住,主窗口本身工作正常。在

函数(updateCombo)也可以正常工作(当您从它的类中调用它时)。在

但当我发送数据时,主窗口总是崩溃!知道为什么吗?在


Tags: the数据selfhostdatamainportsocket
1条回答
网友
1楼 · 发布于 2024-05-23 22:44:14

GUI小部件只能从主线程访问,这意味着调用QApplication.exec()的线程。从任何其他线程访问GUI小部件-您对self.parent()的调用是未定义的行为,在您的情况下,这意味着崩溃。在

你用信号和插槽在后台线程和GUI之间以一种安全的方式进行通信。在

请阅读有关Qt线程功能的文档,因为上面的内容实际上是处理多线程GUI应用程序的基本知识,不仅在Qt中,而且在任何其他GUI框架中也是如此。在

相关问题 更多 >