如果我从新线程添加pyqtqlistwidget,它将在一个新窗口中打开

2024-10-03 02:39:23 发布

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

如果我在开始时将QListItem添加到QListWidget,那么一切都正常。但是如果我从一个新线程(threading)添加这个,它会在一个新窗口中打开,程序会崩溃。 以下是添加元素的代码:

def addLog(self, text, sId=0, pId=0):
        if text == 'Button':
            listItem = QListWidgetItem()
            listWidget = QWidget()
            listLayout = QHBoxLayout()
            listText = QLabel('[' + datetime.now().strftime("%H:%M") + ']   ' + text)
            listButton = QPushButton('Button')
            listLayout.addWidget(listText)
            listLayout.addWidget(listButton)
            listWidget.setLayout(listLayout)
            listItem.setSizeHint(listWidget.sizeHint())

            self.ui.logEdit.addItem(listItem)
            self.ui.logEdit.setItemWidget(listItem, listWidget)

下面是我开始新线程的代码:

def start(self):
    thread = threading.Thread(target=self.worker)
    thread.daemon = True
    thread.start()

以下是新线程的代码:

def worker(self):
        self.addLog('Button', 1, 2) # opens in a new window so the program crushes

如果我从任何地方调用addLog都可以,但是如果我从新线程调用它,程序就会崩溃。你知道吗


Tags: 代码textself程序defbutton线程thread