为什么PyQt的connect()语法如此冗长?

8 投票
3 回答
2681 浏览
提问于 2025-04-16 06:09

我正在学习PyQt,最近在研究信号和槽的机制。对于这种写法我有点困惑,因为它看起来有点啰嗦。为什么我们要这样写:

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

我更希望能这样写:

self.connect(dial.valueChanged, spinbox.setValue)

有没有人能告诉我,为什么connect()的写法需要这么详细和啰嗦呢?

3 个回答

1

还有一种更简单的方法,就是在构造函数的关键字参数中直接把信号名称赋值给函数,比如说 QDial(valueChanged=spinbox.setValue)。这样,PyQt会自动把 valueChanged() 这个信号连接到 spinbox.setValue() 这个函数上。

2

Luper的回答比这个好得多,但为了完整性还是要提一下...

这种丑陋的“老式”语法其实是从C++的世界里遗留下来的 - 你看看那些家伙得用什么语法吧! 真让人恶心...

28

你可以使用PyQt的新风格信号,这种方式更简洁:

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

变成:

dial.valueChanged.connect(spinbox.setValue)

撰写回答