一 说明
本篇继续以显示鼠标位置做例;用窗口的paintEvent事件进行显示。
二 示例代码
import sys
from PyQt5.QtCore import (QEvent, QTimer, Qt,QPoint)
from PyQt5.QtWidgets import (QApplication, QMenu,QMainWindow)
from PyQt5.QtGui import QPainter
class Widget( QMainWindow ):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.text ='hello worlds'
self.resize(1200, 800)
self.move(100, 100)
#设置标题
self.setWindowTitle("Events")
self.setMouseTracking(True)
def mouseMoveEvent(self, event):
#如果没有鼠标双击,执行
globalPos = self.mapToGlobal(event.pos())
x = globalPos.x()
y = globalPos.y()
self.text = '鼠标位置 {0:4d},{1:4d} '.format(x, y)
self.update()
def paintEvent(self, event):
text = self.text
painter = QPainter(self)
if self.text:
#显示给定坐标处的文本,坐标,对齐方式。文本内容
# painter.drawText(self.rect(), Qt.AlignBottom | Qt.AlignHCenter, self.message)
painter.drawText(QPoint(50, 50), self.text);
#5秒钟后触发清空信息的函数,并重新绘制事件
# QTimer.singleShot(5000, self.clearMessage)
# QTimer.singleShot(5000, self.update)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Widget()
form.show()
app.exec_()
三、代码说明
3.1 定义一个全局变量,这是要显示的字符串
self.text ='hello worlds'
3.2 定义鼠标的坐标
def mouseMoveEvent(self, event):
#如果没有鼠标双击,执行
globalPos = self.mapToGlobal(event.pos())
x = globalPos.x()
y = globalPos.y()
self.text = '鼠标位置 {0:4d},{1:4d} '.format(x, y)
self.update()
- 鼠标移动后,坐标位置改变,保存位置 self.text = '鼠标位置 {0:4d},{1:4d} '.format(x, y)
- 自动绘制:self.update()
3.3 绘制函数
- 定义一个刷子,准备画本窗口:painter = QPainter(self)
- 对窗口进行绘制:painter.drawText(QPoint(50, 50), self.text);