PyQt启用断开连接的信号

时间:2018-06-06 09:58:12

标签: python pyqt signals

我试图捕获转义按钮信号并调用方法。我使用以下代码

self.connect(QtGui.QShortcut(QtGui.QKeySequence(Qt.Key_Escape),self),SIGNAL('activated()'),self.esc_pressed)

以上代码正常运作。但在我的程序中,我想重新定义转义键槽,因此我使用以下代码断开此信号

self.disconnect(QtGui.QShortcut(QtGui.QKeySequence(Qt.Key_Escape),self),SIGNAL('activated()'),self.esc_pressed)

以上代码正常工作,转义密钥不再与self.esc_pressed相关联。

再次根据我的要求,我想重新启用转义键信号来调用self.esc_pressed,因此我尝试使用以下代码重新连接

self.connect(QtGui.QShortcut(QtGui.QKeySequence(Qt.Key_Escape),self),SIGNAL('activated()'),self.esc_pressed)

但它不起作用。按下转义键时不调用该方法。

完整代码

import sys
from PyQt4 import QtGui
from PyQt4.QtCore import Qt,SIGNAL

class Main(QtGui.QWidget):
    def __init__(self, ):
        super(Main, self).__init__()
        self.layout = QtGui.QVBoxLayout()

        self.qpbutton1=QtGui.QPushButton('Disconnect')
        self.qpbutton1.clicked.connect(self.btnstate1)
        self.layout.addWidget(self.qpbutton1)

        self.qpbutton2=QtGui.QPushButton('Connect')
        self.qpbutton2.clicked.connect(self.btnstate2)
        self.layout.addWidget(self.qpbutton2)

        self.setLayout(self.layout)

        self.setWindowTitle("Signal and slot")
        self.connect(QtGui.QShortcut(QtGui.QKeySequence(Qt.Key_Escape),self),SIGNAL('activated()'),self.esc_pressed)

    def btnstate1(self):
        self.disconnect(QtGui.QShortcut(QtGui.QKeySequence(Qt.Key_Escape),self),SIGNAL('activated()'),self.esc_pressed)

    def btnstate2(self):
        self.connect(QtGui.QShortcut(QtGui.QKeySequence(Qt.Key_Escape),self),SIGNAL('activated()'),self.esc_pressed)

    def esc_pressed(self):
        print 'escape pressed'


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main=QtGui.QWidget()
    main = Main()
    main.show()
    sys.exit(app.exec_())

我哪里出错了?

由于

0 个答案:

没有答案
相关问题