gpt4 book ai didi

python - QtGui.QPushButton.clicked[bool] 和 QtGui.QPushButton.clicked 之间的区别

转载 作者:太空狗 更新时间:2023-10-30 02:03:57 28 4
gpt4 key购买 nike

请注意 redb.clicked[bool].connect(self.setColor) 行,为什么要添加 [bool] 部分?我试图删除该部分,将行修改为 redb.clicked.connect(self.setColor),结果是一样的。那是什么?

import sys
from PyQt4 import QtGui

class Example(QtGui.QWidget):

def __init__(self):
super(Example, self).__init__()
self.initUI()

def initUI(self):

self.col = QtGui.QColor(0, 0, 0)
redb = QtGui.QPushButton('Red', self)
redb.setCheckable(True)
redb.clicked[bool].connect(self.setColor)
self.square = QtGui.QFrame(self)
self.square.setGeometry(150, 20, 100, 100)
self.square.setStyleSheet("QWidget { background-color: %s }" %
self.col.name())
self.show()

def setColor(self, pressed):
if pressed:
val = 255
else: val = 0
self.col.setRed(v)
self.square.setStyleSheet("QFrame { background-color: %s }" %
self.col.name())

def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

if __name__ == '__main__':
main()

最佳答案

在 PyQt 中,您可以使用信号的签名对信号进行索引,以选择正确的重载。 (您没看错:可以重载 Qt 信号并提供具有完全不同参数的信号的不同版本)。 C++ 对此提供了很好的支持,但 Python 不直接支持重载,因此不支持这种索引机制。

如果信号没有过载,则不需要这样做,使用签名进行索引与完全不使用索引具有相同的效果。

例子:

import sys
from PyQt4.QtGui import *
app = QApplication(sys.argv)

def valueChanged(eitherIntOrString):
print(eitherIntOrString, type(eitherIntOrString))

spinbox = QSpinBox()
spinbox.valueChanged[str].connect(valueChanged)
spinbox.valueChanged[int].connect(valueChanged)
spinbox.valueChanged.connect(valueChanged)
spinbox.show()

app.exec_()

示例输出:

1 <class 'str'>
1 <class 'int'>
1 <class 'int'>
2 <class 'str'>
2 <class 'int'>
2 <class 'int'>
3 <class 'str'>
3 <class 'int'>
3 <class 'int'>

现在您问 PyQt 如何选择默认重载是正确的?(示例中的第三个 connect())。答案是:他们在 PyQt 文档中记录了这一点。 C++ Qt 文档和 PyQt 文档之间的少数差异之一。例如:http://pyqt.sourceforge.net/Docs/PyQt4/qspinbox.html#valueChanged .在我看来,默认信号始终是在 C++ header 中首先声明的信号,但情况可能并非总是如此。

A signal may be overloaded, ie. a signal with a particular name may support more than one signature. A signal may be indexed with a signature in order to select the one required. A signature is a sequence of types. A type is either a Python type object or a string that is the name of a C++ type. The name of a C++ type is automatically normalised so that, for example, QString can be used instead of the non-normalised const QString &.

来源:http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html

关于python - QtGui.QPushButton.clicked[bool] 和 QtGui.QPushButton.clicked 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com