KeypressEvent не работает, как это исправить? - PullRequest
1 голос
/ 11 июня 2011

Я пытаюсь заставить работать keypressevent со следующим кодом

import sys,
from PyQt4 import QtCore, QtGui

class Ui_MainWindow(QtGui.QWidget):
    def __init__(self):
        super(Ui_MainWindow, self).__init__()


    def keyPressEvent(self, event):
        print 'a'

    def setupUi(self, MainWindow):
        MainWindow.setObjectName(("MainWindow"))
        MainWindow.resize(371, 345)
        MainWindow.setMaximumSize(QtCore.QSize(401, 600))
        MainWindow.setWindowIcon(QtGui.QIcon('icons/icon.png'))
        screen = QtGui.QDesktopWidget().screenGeometry()
        mysize = MainWindow.geometry()
        hpos = ( screen.width() - mysize.width() ) / 2
        vpos = ( screen.height() - mysize.height() ) / 2
        MainWindow.move(hpos, vpos)
        #some GUI
        MainWindow.setCentralWidget(self.centralwidget)
        cd=MainWindow.centralWidget()
        cd.setFocusPolicy(QtCore.Qt.StrongFocus)
        cd.setFocus()
        self.actionHardware = QtGui.QAction(MainWindow)
        self.actionHardware.setObjectName(("actionHardware"))
        self.retranslateUi(MainWindow)


        #COnnect odes


    def retranslateUi(self, MainWindow):
        #sime button text codes

if __name__=="__main__" :
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Код был частично сгенерирован с использованием QTDesigner.Я заметил, что замена Mainwindow.show () на ui.show () включает keypressevent, но за счет отсутствия отображения кнопок, которые я создаю в центральном виджете Mainwindow

1 Ответ

1 голос
/ 11 июля 2011

Похоже, проблема в том, что вы повторно используете вывод кода Designer. Вы определили Ui_MainWindow.keyPressEvent и создали экземпляр «ui» класса. Однако: «ui» никогда нигде напрямую не включается в GUI (ui.setupUi добавляет другие виджеты, но не сам, в MainWindow), и, следовательно, события никогда не доставляются в ui.

Мой подход выглядел бы так:

class Ui_MainWindow(object):  ## note this does not need to inherit QWidget
    ...                       ## and ideally, this code should not be changed
    ...                       ## after designer generates it
    ...

class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def keyPressEvent(self, ev):
        print "key press"

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    MainWindow = Window()
    MainWindow.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...