北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

第8天 | 28天学会PyQt5,窗口事件

在QWidget和QMainWindow窗口中,提供了鼠标和键盘的处理函数,你需要用到时,进行重载即可。事件重载方法里的e代表了事件对象,mouseMoveEvent(self,e)里e表示QMouseEvent的对象,用对象的x()和y()方法,可以得到鼠标的x和y坐标点。更多可重载的事件方法,可以查看QWidget的源代码。除了之前讲过的重载contextMenuEvent(self, e)方法,实现上下文菜单外,常用的方法还有如下几个:

方法

描述

paintEvent(self, e)

鼠标拖动窗口,改变窗口大小时触发;

mouseMoveEvent(self, e)

鼠标在窗口中移动时,触发事件;

keyPressEvent(self, e)

键盘按键按下后触发;

closeEvent(self, e)

监听关闭窗口。

程序清单:win_event.py

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox, 
  QDesktopWidget
from PyQt5.QtCore import Qt


# 继承QWidget
class WinEvent(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 调整窗口大小
        self.resize(900, 500)
        # 窗口居中
        self.center()
        # 窗口标题
        self.setWindowTitle("窗口事件")
        # 显示窗口
        self.show()

    # 窗口改变大小时触发
    def paintEvent(self, e):
        rect = e.rect()
        print("宽为:%d,高为:%d" % (rect.width(), rect.height()))

    # 鼠标移动
    def mouseMoveEvent(self, e):
        self.setMouseTracking(True)
        pos = e.windowPos()
        print("x坐标:" + str(pos.x()) + ",y坐标:" + str(pos.y()))

    # 监听按下键盘
    def keyPressEvent(self, e):
        print("键盘按下的键盘代码为:%s" % e.key())
        if e.key() == Qt.Key_Escape:
            self.close()

    # 关闭窗口
    def closeEvent(self, e):
        result = QMessageBox.information(self, "退出提醒", 
                                         "你确定要退出系统?",
                                         QMessageBox.Yes |
                                         QMessageBox.No)
        if result == QMessageBox.Yes:
            print("执行退出动作")
            self.close()

    # 实现居中
    def center(self):
        f = self.frameGeometry()
        c = QDesktopWidget().availableGeometry().center()
        f.moveCenter(c)
        self.move(f.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = WinEvent()
    sys.exit(app.exec_())

运行程序之后,弹出的窗口如下:

好了,窗口事件的内容就说到这里了,关注我,下一节更精彩。

码字不易,你的关注和转发是对我最大的鼓励,谢谢!

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!

#python##程序员##好平台好讲师##桌面##热搜#

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言