1

这是我的按键事件

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,窗口将关闭。我哪里出错了?

编辑:

基本上我有一个带有 lineedit 和一个按钮的窗口。我想通过单击 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 之外,它们都没有工作/

4

2 回答 2

2

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


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

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

否则,您将不得不使用事件过滤器。稍后我会尝试发布一些代码。


您的最终编辑使其更清晰。您可以安全地放下keyPressEvent并使用:

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

原来这是一个多么混乱的答案:)

于 2012-11-15T14:57:41.880 回答
0

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

QtGui.QMessageBox.information(self,"hello","I m here")
于 2012-11-15T15:23:22.397 回答