如果我在开始时将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都可以,但是如果我从新线程调用它,程序就会崩溃。你知道吗
我找到了解决办法。我创建了
pyqtSignal()
,并将它连接到我的函数和来自新线程的调用信号。它对我有用相关问题 更多 >
编程相关推荐