MainWindow中的KeyEvent(PyQt4)

Gua*_*l11 6 python qt pyqt pyqt4

我正在尝试使用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_())
Run Code Online (Sandbox Code Playgroud)

Kab*_*bie 6

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
Run Code Online (Sandbox Code Playgroud)


Ada*_*ted 6

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

因此,一个简单的方法是在 def setupUI 中添加以下内容

MainWindow.keyPressEvent = self.newOnkeyPressEvent
Run Code Online (Sandbox Code Playgroud)

然后在 Ui_MainWindow 类中创建自己的按键函数

def newOnkeyPressEvent(self,e):
if e.key() == QtCore.Qt.Key_Escape:
    print "User has pushed escape"
Run Code Online (Sandbox Code Playgroud)