5

PyQt4 で GUI を構築し、矢印キーでいくつかのアクションを制御しようとしています。それにもかかわらず、キーストロークを取得できません。

それは単純な問題でなければなりませんが、私はこれに初心者です。そのため、どんな助けでも大歓迎です。ありがとう!

import sys
from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
     MainWindow.setObjectName(_fromUtf8("MainWindow"))
     MainWindow.resize(910, 500)
     self.centralwidget = QtGui.QWidget(MainWindow)
     self.centralwidget.setObjectName(_fromUtf8("centralwidget"))  

     MainWindow.setCentralWidget(self.centralwidget)
     self.menubar = QtGui.QMenuBar(MainWindow)
     self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 22))
     self.menubar.setObjectName(_fromUtf8("menubar"))
     MainWindow.setMenuBar(self.menubar)
     self.statusbar = QtGui.QStatusBar(MainWindow)
     self.statusbar.setObjectName(_fromUtf8("statusbar"))
     MainWindow.setStatusBar(self.statusbar)

  def keyPressEvent(self, event):
     key = event.key()
     print(key)

     if key == QtCore.Qt.Key_Left:
        print('Left Arrow Pressed')

if __name__=='__main__':
  app = QtGui.QApplication(sys.argv)
  MainWindow = QtGui.QMainWindow()
  ui = Ui_MainWindow()
  ui.setupUi(MainWindow)

  MainWindow.show()
  sys.exit(app.exec_())
4

2 に答える 2

9

keyPressEventで再実装する必要がありますQWidget。この場合、 のサブクラスですQWidget

ui クラスに入れるべきではありません。

class MyWindow(QtGui.QMainWindow):
    def keyPressEvent(...
        ...

if __name__=='__main__':
    ...
    window=MyWindow()
    ...
    sys.exit(app.exec_())  # and don't forget to run the mainloop
于 2013-01-11T13:58:25.253 に答える
4

同様の問題がありましたが、生成された python スクリプトの構造を .ui ファイルから変更しないようにする必要がありました。

したがって、これに対する簡単なアプローチは、def setupUI に以下を追加することでした。

MainWindow.keyPressEvent = self.newOnkeyPressEvent

そして、 Ui_MainWindow クラスで独自のキープレス関数を作成します

def newOnkeyPressEvent(self,e):
if e.key() == QtCore.Qt.Key_Escape:
    print "User has pushed escape"
于 2016-12-19T08:07:37.147 に答える