0
我做了类似的回答here。 图形用户界面很简单,你点击一个按钮启动一个线程,而不是发送信号它发送事件。事件导致标签改变文本。PySide信号替代使用事件不起作用
下面的代码:
from PySide.QtGui import *
from PySide.QtCore import *
import sys, time
class MyEvent(QEvent):
def __init__(self, message):
super().__init__(QEvent.User)
self.message = message
class MyThread(QThread):
def __init__(self, widget):
super().__init__()
self._widget = widget
def run(self):
for i in range(10):
app.sendEvent(self._widget, MyEvent("Hello, %s!" % i))
time.sleep(.1)
class MyReceiver(QWidget):
def __init__(self, parent=None):
super().__init__()
layout = QHBoxLayout()
self.label = QLabel('Test!')
start_button = QPushButton('Start thread')
start_button.clicked.connect(self.startThread)
layout.addWidget(self.label)
layout.addWidget(start_button)
self.setLayout(layout)
def event(self, event):
if event.type() == QEvent.User:
self.label.setText(event.message)
return True
return False
def startThread(self):
self.thread = MyThread(self)
self.thread.start()
app = QApplication(sys.argv)
main = MyReceiver()
main.show()
sys.exit(app.exec_())
的问题是,只有第一个事件得到由MyReceiver
处理,然后将小部件冻结! 任何线索?由于
谢谢,似乎很明显。但我实际上已经尝试用'QApplication.notify()'发送事件,它应该自动传播事件,并且它不起作用。 – MadeOfAir
仔细阅读文档可以发现传播只发生在鼠标和键盘事件上,所以这就是为什么'event()'不会传播的原因。 – MadeOfAir