在PyQT中使用信号与变量

0 投票
2 回答
5162 浏览
提问于 2025-04-17 04:15

你好,我正在想办法从我的工作类中获取数据。我有一段服务器代码,它是以线程的方式运行的,我想把一些数据从我的服务器发送到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)

撰写回答