我试图捕获转义按钮信号并调用方法。我使用以下代码
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_())
我哪里出错了?
由于