python - PyQt 连接 SIGNAL 到多个 SLOT

标签 python qt pyqt4

我正在尝试通过 使用 python 和 qt 进行快速图形用户界面编程 来学习 PyQt,目前正在学习 SignalsSlots.

下面是我的一小段代码:

self.connect(self.dial, SIGNAL("valueChanged(int)"),self.spinbox.setValue) #1
self.connect(self.dial, SIGNAL("valueChanged(int)"),self.getValue_dial)    #2
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.dial.setValue)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.getValue_spinbox)

def getValue_dial(self):
        print self.dial.value()

def getValue_spinbox(self):
        print self.dial.value()

我在这里想要实现的是立即调用 2 SLOTS,即 spinbox.setValuegetValue_dial for dial 对象,一旦发出 ValueChanged(int) 信号。

上面的代码成功执行,没有任何错误,并且在更改时打印适当的值。

现在我的问题是上述方法是否适合为单个信号调用多个槽?

可以将以上两个语句(1 和 2)组合成一个语句吗?

这是我的 complete code 的链接.

最佳答案

你这样做的方式很好。如果您有很多事情要做,您可以连接到一个新函数来为您处理所有事情。

我注意到在您连接的 getValue 函数中,您直接从对象中获取值;您是否知道该值是通过 valueChanged(int) 信号作为参数传递的?如果您更改 getValue 函数以接受附加参数,则无需直接从对象获取值。当然,您可以完全取消 getValue 函数,并在辅助函数中发出打印语句。

self.connect(self.dial, SIGNAL("valueChanged(int)"), self.dial_value_changed)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.spinbox_value_changed)

def dial_value_changed(self, value):
    self.spinbox.setValue(value)
    self.getValue_dial(value)

def spinbox_value_changed(self, value):
    self.dial.setValue(value)
    self.getValue_spinbox(value)

def getValue_dial(self, value):
        print value

def getValue_spinbox(self, value):
        print value

此外,这取决于偏好,有一个 new style for signals and slots这可以使代码更容易阅读。它将改变

self.connect(self.dial, SIGNAL("valueChanged(int)"), self.dial_value_changed)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.spinbox_value_changed)

上面的行

self.dial.valueChanged.connect(self.dial_value_changed)
self.spinbox.valueChanged.connect(self.spinbox_value_changed)

但对于最初的问题和您正在做的两件事,我只是连接信号两次而不是使用辅助函数。

关于python - PyQt 连接 SIGNAL 到多个 SLOT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10653704/

相关文章:

javascript - Nodejs 查找已知蓝牙设备

Python - flask : Static folder outside root directory

c++ - 等待按钮按下(QT)

c++ - QMetaObject::invokeMethod(object, method, stuff+params) 与 object->method()

python - 将 QML 元素锚定到窗口

python - 如何将样式表应用于 PyQt 中的自定义小部件

python - 加入列表中的元组

python - Django 的 OneToOneField 不是引用另一个表的 id 字段吗?

sqlite - 如果调用 setRelation,QSqlRelationalTableModel insertRecord 不起作用

python - QObject::connect: 无法对类型为 'QTextCursor' 的参数进行排队