找回密码
 立即注册
Qt开源社区 门户 查看内容

PyQt 键盘事件和鼠标事件

2019-6-21 12:59| 发布者: admin| 查看: 2041| 评论: 0

摘要: PyQt为事件处理提供了两种机制:高级的信号和槽机制,以及低级的事件处理程序。前者已经介绍过,后者也有涉及,比如我们曾重新实现过窗口部件的closeEvent()。PyQt为拦截和处理事件提供了5种不同的方式,这里只介绍 ...
PyQt为事件处理提供了两种机制:高级的信号和槽机制,以及低级的事件处理程序。前者已经介绍过,后者也有涉及,比如我们曾重新实现过窗口部件的closeEvent()。

PyQt为拦截和处理事件提供了5种不同的方式,这里只介绍最常用的头两种方式。

第一种是重新实现特定事件,如键盘和鼠标事件、重绘事件、尺寸大小改变事件等等,的处理程序。可参见代码示例。

第二种重新实现event()事件处理程序 。因为在任何特殊的事件处理程序被调用前,都会调用event()。重新实现这个方法,可以允许我们处理那些不能在某一特定事件处理程序(如对Tab键焦点转换行为的重新定义)中处理的事件,或者实现那些不存在明确事件处理程序的事件,比如QEvent.ToolBarChange。当需要重新实现这些处理程序时,可以对所有其它不是自己亲自处理的事件调用它们的基类的实现。



    import sysfrom PyQt5.QtWidgets import QMainWindow, QWidget, QApplicationfrom PyQt5.QtCore import Qt
    classMainWindow(QMainWindow):def__init__(self, parent = None): super().__init__(parent)        self.initUI()definitUI(self): self.setWindowTitle("鼠标键盘事件示例") self.setCentralWidget(QWidget())#指定主窗口中心部件 self.statusBar().showMessage("ready")#状态栏显示信息 self.resize(300,185)#重新实现各事件处理程序defkeyPressEvent(self, event): key = event.key()if Qt.Key_A <= key <= Qt.Key_Z:if event.modifiers() & Qt.ShiftModifier: #Shift 键被按下 self.statusBar().showMessage('"Shift+%s" pressed' % chr(key),500)elif event.modifiers() & Qt.ControlModifier: #Ctrl 键被按下 self.statusBar().showMessage('"Control+%s" pressed' % chr(key),500)elif event.modifiers() & Qt.AltModifier: #Alt 键被按下 self.statusBar().showMessage('"Alt+%s" pressed' % chr(key),500)else: self.statusBar().showMessage('"%s" pressed' % chr(key),500)elif key == Qt.Key_Home: self.statusBar().showMessage('"Home" pressed' ,500)elif key == Qt.Key_End: self.statusBar().showMessage('"End" pressed',500)elif key == Qt.Key_PageUp: self.statusBar().showMessage('"PageUp" pressed',500)elif key == Qt.Key_PageDown: self.statusBar().showMessage('"PageDown" pressed',500)else: #其它未设定的情况 QWidget.keyPressEvent(self, event) #留给基类处理''' 其它常用按键: Qt.Key_Escape,Qt.Key_Tab,Qt.Key_Backspace,Qt.Key_Return,Qt.Key_Enter, Qt.Key_Insert,Qt.Key_Delete,Qt.Key_Pause,Qt.Key_Print,Qt.Key_F1...Qt.Key_F12, Qt.Key_Space,Qt.Key_0...Qt.Key_9,Qt.Key_Colon,Qt.Key_Semicolon,Qt.Key_Equal ... '''defmousePressEvent(self, event):#鼠标按下事件 pos = event.pos() #返回鼠标所在点QPoint self.statusBar().showMessage('Mouse is pressed at (%d,%d) of widget '% (pos.x(),pos.y()),500) globalPos = self.mapToGlobal(pos) print('Mouse is pressed at (%d,%d) of screen '% (globalPos.x(),globalPos.y()))defmouseReleaseEvent(self, event):#鼠标释放事件 pos = event.pos() #返回鼠标所在点QPoint self.statusBar().showMessage('Mouse is released at (%d,%d) of widget '% (pos.x(),pos.y()),500)if event.button() == Qt.LeftButton: print("左键")elif event.button() == Qt.MidButton: print("中键")elif event.button() == Qt.RightButton: print("右键")defmouseDoubleClickEvent(self, event):#鼠标双击事件 pos = event.pos() #返回鼠标所在点QPoint self.statusBar().showMessage('Mouse is double-clicked at (%d,%d) of widget '% (pos.x(),pos.y()),500)defmouseMoveEvent(self, event):#鼠标移动事件 pos = event.pos() #返回鼠标所在点QPoint self.statusBar().showMessage('Mouse is moving at (%d,%d) of widget '% (pos.x(),pos.y()),500) if __name__ == '__main__': app = QApplication(sys.argv) mw = MainWindow() mw.show()    sys.exit(app.exec_())
    ----------------------------------------------------------------------------------------------------------------------
    我们尊重原创,也注重分享,文章来源于微信公众号:Python编程 pyqt matplotlib,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
    ----------------------------------------------------------------------------------------------------------------------

    鲜花

    握手

    雷人

    路过

    鸡蛋
    
    公告
    可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了