0
点赞
收藏
分享

微信扫一扫

QT5界面操作3:paintEvent(self, event)用法

爪哇驿站 2022-03-11 阅读 50
qt

一  说明

本篇继续以显示鼠标位置做例;用窗口的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);

四、效果

举报

相关推荐

0 条评论