1

これは私の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()

後でさらにキーを追加します。しかし、エスケープ以外のどれも機能していません/

4

2 に答える 2

2

お探しのメソッドはkeyPressEventではなくと呼ばれますKeyPressEvent


あなたのイベントQLineEditを盗んでいるようです。行編集からエンターキーを処理することだけが必要な場合は、信号を次のようにKeyPress接続できます。returnPressedself.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 に答える