QtCore.Qt.Key_似乎没有用

时间:2012-11-15 14:30:13

标签: python pyqt4 keypress qtgui

这是我的keyPressEvent

def keyPressEvent(self , e): 
    key = e.key()
    if key == QtCore.Qt.Key_Escape:
         self.close()
    elif key == QtCore.Qt.Key_A:
         print 'Im here' 

但是,如果我点击A,则不会打印。然而,如果我点击Escape,窗口就会关闭。我哪里出错了?

编辑:

基本上我有一个带有线条和按钮的窗口。我想通过点击Enter将按钮链接到一个功能,让我们说好玩。这是我的代码

import sys
from PyQt4 import QtGui , QtCore

class Example(QtGui.QWidget):

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

    def window(self):
        self.setWindowTitle('Trial')

        self.layout = QtGui.QGridLayout()
        self.text = QtGui.QLineEdit()
        self.first = QtGui.QPushButton('Button')
        self.layout.addWidget(self.text , 0 , 0)    
        self.layout.addWidget(self.first , 1 , 0)
        self.setLayout(self.layout)
        self.first.clicked.connect(self.fun)
        self.show()

    def fun(self):
        //do something


    def keyPressEvent(self , e):
        key = e.key()
        if key == QtCore.Qt.Key_Escape:
            self.close()
        elif key == QtCore.Qt.Key_Enter:
            self.fun()

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



if __name__ == '__main__':
    main()

我稍后会添加更多密钥。但除Escape之外没有其他人正在工作/

2 个答案:

答案 0 :(得分:2)

您正在寻找的方法称为keyPressEvent,而不是KeyPressEvent


您的QLineEdit似乎正在窃取您的KeyPress事件。如果您只想处理行编辑中的回车键,则可以将returnPressed信号连接到self.fun

self.text.returnPressed.connect(self.fun)  # in PySide

否则,您将不得不使用event filters。我稍后会尝试发布一些代码。


您的最终修改使其更加清晰。您可以安全地删除keyPressEvent并使用:

self.text.returnPressed.connect(self.fun)
self.button.clicked.connect(self.fun)

这是一个多么糟糕的答案:)

答案 1 :(得分:0)

你正在制作GUI应用程序,对吗?如果是,那么这样的打印将在控制台中打印。试试这个......

QtGui.QMessageBox.information(self,"hello","I m here")