【发布时间】:2016-07-17 15:43:28
【问题描述】:
我在下面提出了一个简单的信号/槽机制。当通过 QSlider::valueChanged() 更改值时,QSlider 会调用该信号。并且插槽是通过 QLCDNumber::display() 方法调用的。
令我困惑的是为什么 PyQt5 的文档如此之少,而大多数文档都指向 Qt5 的链接。我对代码的具体问题是:
1) 如果QSlider::valueChanged() (signal) 需要一个整数作为参数,为什么我们只传入 QLCDNumber::display() (slot) 这是一个 void 函数。因此不会传入任何内容。
2) 在下面注释掉的代码中,我无法调用第二个插槽。您可以为 1 个信号调用的插槽数量是否有限制?如果有我该如何在 PyQt5 中调用多个插槽。
编辑:我相信因为 printLabel() 不是定义的插槽,这就是我遇到问题的原因。我可以在 ::connect() 参数中包含任意数量的插槽吗?或者我是不是在用一种老套的方式来解决这个问题。
import sys
from PyQt5.QtCore import (Qt)
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,
QVBoxLayout, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def printLabel(self, str):
print(str)
def initUI(self):
lcd = QLCDNumber(self)
sld = QSlider(Qt.Horizontal, self)
vbox = QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
#This line works
sld.valueChanged.connect(lcd.display)
#This line does not work
#sld.valueChanged.connect(lcd.display, self.printLabel("hi"))
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Signal & slot')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
【问题讨论】:
-
QWidget中没有定义像printLabel这样的槽。您究竟想通过第二个广告位实现什么目标? -
"您可以为 1 个信号调用的插槽数量是否有限制?" => 没有
标签: qt pyqt pyqt5 qt-signals