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

我遇到了类似的问题,但我需要不更改 .ui 文件中生成的 python 脚本的结构。

因此,一个简单的方法是在 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 回答