当前位置:首页 > 技术知识 > 正文内容

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

maynowei6个月前 (09-18)技术知识59

在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##程序员##好平台好讲师##桌面##热搜#

相关文章

iOS开发生涯的初恋:详解Objective-C多项改进

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送...

Android主流UI开源库整理(android完整开源项目)

前言最近老大让我整理一份 Android主流UI开源库 的资料,以补充公司的Android知识库。由于对格式不做特别限制,于是打算用博客的形式记录下来,方便查看、防丢并且可以持续维护、不断更新。标题隐...

LabVIEW实现Oracle数据库的访问(labview数据库查询界面)

1. 安装 Oracle 客户端下载:从 Oracle 官方网站下载适用于 Windows 操作系统的 Oracle 驱动程序。确保下载的版本与 LabVIEW 环境和操作系统兼容。1)以 Windo...

一个快要被忘记的数据库开发岗位,但应该被尊重

数据库测试,似乎是被人遗忘的数据库职业,但依然是不错的选择。底下是我在某站找的招聘启事,就连蚂蚁金服都在积极寻找数据库测试人:要说我经历的项目,大大小小也有几十个,从 C/S, B/S, 再到 B/C...

ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里。也...

超详细的Oracle19c修改数据库用户名教程

概述由于开发很多视图指定了某个用户名,故需修改数据库用户名srmpro为srm。以下为操作过程..1、停止应用防止修改用户名密码后应用一直在发起错误连接,可事先查询哪个IP在连接数据库,然后断开对应连...