首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtGui.QPushButton.clicked[bool]与QtGui.QPushButton.clicked的区别

QtGui.QPushButton.clicked[bool]与QtGui.QPushButton.clicked的区别
EN

Stack Overflow用户
提问于 2014-10-11 16:39:55
回答 1查看 2K关注 0票数 4

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

代码语言:javascript
复制
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()    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-11 16:47:51

在PyQt中,您可以对信号进行签名索引,以选择正确的重载。(你读对了:你可以让Qt信号过载,并提供完全不同参数的不同版本的信号)。C++很好地支持这一点,但是Python并不直接支持重载,因此这种索引机制。

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

示例:

代码语言:javascript
复制
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_()

样本输出:

代码语言:javascript
复制
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++头中首先声明的信号,但情况可能并不总是这样。

信号可能超载.具有特定名称的信号可以支持多个签名。信号可以用签名索引,以便选择所需的签名。签名是类型的序列。类型要么是Python对象,要么是C++类型的名称。C++类型的名称会自动标准化,例如,可以使用QString来代替非规范化的const QString &。

来源:slots.html

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26316879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档