1

キーイベントをキャプチャできない次のコードがあります。uic.loadUi() を使用して GUI をロードしました。しかし、キーボードイベントをキャプチャできないようです。

助けてください!

class cMyApp(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self)

        self.ui = uic.loadUi("myApp.ui")
        #~ self.ui.show()   # Show myApp UI but key event Doesn't Work :(
        self.show()         # Show a small window but key event works.

    def keyPressEvent(self, event):
        if type(event)==QtGui.QKeyEvent:
            print ("type(event) = ",type(event))
            if event.key()==QtCore.Qt.Key_Escape:
                print("Esc pressed!!!")
                self.close()
            event.accept()
        else:
            event.ignore()

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    myApp = cMyApp()
    sys.exit(app.exec_())
4

1 に答える 1

2

問題を発見!;P

uic.loadUI() でロードする場合、baseinstance の別のパラメーターとして「self」を指定する必要があります。それ以外の場合、デフォルトは None です。

修正されたコード部分は次のようになります。

    self.ui = uic.loadUi("myApp.ui", self)  # Must supply 'self' as baseinstance.
    self.ui.show()   # Show myApp UI can work with key event now! :)
于 2013-06-10T08:51:17.273 に答える