在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方面的干货了。赶紧来围观啊!!!