2016-07-21 8 views
1

QDialogウィンドウに続行ボタンがあります。 Enterキーを押すたびに続行ボタンが押されるため、[続行]ボタンはデフォルトのボタンです。私は何か変わったことを発見しました。Enterキーを3回押すと、Continueボタンが3回押されます。しかし、4回目に押すと、ウィンドウ全体が閉じます。ウィンドウを閉じる[続行]ボタンのすぐ下にキャンセルボタンがありますが、キャンセルボタンをデフォルトのボタンなどにしません。QWidgetでkeyPressEventを実装する

keyPressEventを無効にして、ウィンドウ内に入るたびに入力ボタンが常に[続行]ボタンに接続されるようにしました。

は、これは私が今持っているものです。

class ManualBalanceUI(QtGui.QWidget): 
    keyPressed = QtCore.pyqtSignal() 

    def __init__(self, cls): 
     super(QtGui.QWidget, self).__init__() 
     self.window = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint) 
     self.ui = uic.loadUi('ManualBalanceUI.ui', self.window) 
     self.keyPressed.connect(self.on_key) 

    def keyPressEvent(self, event): 
     super(ManualBalanceUI, self).keyPressEvent(event) 
     self.keyPressed.emit(event) 

    def on_key(self, event): 
     if event.key() == QtCore.Qt.Key_Enter and self.ui.continueButton.isEnabled(): 
      self.proceed() # this is called whenever the continue button is pressed 
     elif event.key() == QtCore.Qt.Key_Q: 
      self.window.close() # a test I implemented to see if pressing 'Q' would close the window 
    def proceed(self): 
     ... 
    ... 

しかし、これは今何をやっているようには見えません。 'Q'を押すとウィンドウが閉じず、 '入力'キーが機能しているかどうかはわかりません。私もSourceForgeですべてのドキュメントを見直しPyQt Connect to KeyPressEvent

は私が事前にこの質問を見ました。どんな助けでも大歓迎です!

答えて

1

あなたは2つの方法がありますが、いずれかのファンシーな作業でkeyPresseventを再実装するだけです。このように

from PyQt4 import QtCore, QtGui 
import sys 

class Example(QtGui.QWidget): 
    def __init__(self): 
     super(Example, self).__init__() 
     self.setGeometry(300, 300, 250, 150) 
     self.show() 

    def keyPressEvent(self, event): 
     if event.key() == QtCore.Qt.Key_Q: 
      print "Killing" 
      self.deleteLater() 
     elif event.key() == QtCore.Qt.Key_Enter: 
      self.proceed() 
     event.accept() 

    def proceed(self): 
     print "Call Enter Key" 

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

if __name__ == '__main__': 
    main() 

信号を試したときに、この信号を正しく実装するために欠落している場合は、ここでは更新されたバージョンです。

class Example(QtGui.QWidget): 
    keyPressed = QtCore.pyqtSignal(QtCore.QEvent) 
    def __init__(self): 
     super(Example, self).__init__() 
     self.setGeometry(300, 300, 250, 150) 
     self.show() 
     self.keyPressed.connect(self.on_key) 

    def keyPressEvent(self, event): 
     super(Example, self).keyPressEvent(event) 
     self.keyPressed.emit(event) 

    def on_key(self, event): 
     if event.key() == QtCore.Qt.Key_Enter and self.ui.continueButton.isEnabled(): 
      self.proceed() # this is called whenever the continue button is pressed 
     elif event.key() == QtCore.Qt.Key_Q: 
      print "Killing" 
      self.deleteLater() # a test I implemented to see if pressing 'Q' would close the window 

    def proceed(self): 
     print "Call Enter Key" 

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

if __name__ == '__main__': 
    main() 
+0

お返事ありがとうございます!私は両方の方法を試してみましたが、残念ながら両者は私のために働いていません。私はそれと一緒に遊んでいくつもりなら何かがあればコメントします –

+0

それはうまくいくはずです、それは私が提供できる最少の例です。幸運:) – Achayan

0

アチャヤンの回答では、コードに成功しました。 EnterキーとReturnキーがあります。 Key_ EnterキーとKey_Returnを試してください。私のキーボードでは違っています。

関連する問題