在PyQT中使用信号与变量
你好,我正在想办法从我的工作类中获取数据。我有一段服务器代码,它是以线程的方式运行的,我想把一些数据从我的服务器发送到pyQT的图形界面(GUI)
在我的图形界面代码中有一个变量
self.mytext = QTextEdit()
而在我的服务器代码中,我把数据发送给了图形界面。唯一的问题是我不知道怎么设置信号来正确地做到这一点 :-P
self.emit(SIGNAL('mytext'), mytext.setText(msg))
有没有什么想法可以解决这个问题呢 :-)
*谢谢
2 个回答
1
你需要创建一个信号,它的格式要和你想要连接的槽(slot)一样。
self.newText = QtCore.pyqtSignal(QtCore.QString)
然后把这个信号连接到图形界面的 'setText' 槽上。
self.newText.connect(mytext.setText)
之后你就可以在代码中随时发出这个信号了:
self.newText.emit("My Text Here")
3
首先,了解一下信号和槽的概念是怎么工作的。可以参考Qt的官方文档,这是个不错的起点。如果你在使用PyQt 4.5及以上版本,建议使用新风格的信号和槽,因为它们更符合Python的风格。
下面是一个简单的例子,展示了这个概念是如何运作的(省略了一些明显的部分)。
class myWorker(QtCore.QThread):
# Register the signal as a class variable first
mySignal = QtCore.pyqtSignal(QtCore.QString)
# init and other stuff...
def someFunction(self):
#....
# emit the signal with the parameter
self.mySignal.emit(msg)
# GUI
class myWindow(QtGui.QMainWindow):
def __init__(self):
# usual init stuff and gui setup...
self.mytext = QTextEdit()
# worker
self.worker = myWorker()
# register signal to a slot
self.worker.mySignal.connect(self.mytext.setText)