[pyqt5]关于在pyqt5界面上鼠标位置问题

这篇具有很好参考价值的文章主要介绍了[pyqt5]关于在pyqt5界面上鼠标位置问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先上代码,主要看鼠标移动事件里面代码

import sys
from PyQt5 import QtCore
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtGui import QPainter, QPen, QPixmap, QPainterPath, QFont, QColor, QBrush
from PyQt5.QtWidgets import QApplication, QWidget
import numpy as np


class DemoMouseEvent(QWidget):
    def __init__(self, parent=None):
        super(DemoMouseEvent, self).__init__(parent)
        # 设置窗口标题
        self.setWindowTitle('鼠标事件演示')
        # 设置窗口大小
        self.setFixedSize(480, 320)

        self.beginPoint = QPoint()  # 起始点
        self.endPoint = QPoint()  # 结束点

        self.pixmap = QPixmap('d:\\67.jpg')
        #self.pixmap.fill(Qt.lightGray)
        self.copt_pixmap =self.pixmap.copy()
        self.setMouseTracking(True)
        self.cur_x = 0
        self.cur_y = 0


    def draw(self, painter):
        path = QPainterPath()
        f = QFont('黑体', 10)
        point = QPoint(20, 20)
        path.addText(point, f, "世界您好")
        point1 = QPoint(250, 250)
        point2 = QPoint(self.cur_x, self.cur_y)
        path.moveTo(point)
        path.lineTo(point1)
        path.lineTo(point2)
        path.lineTo(point)
        #path.addEllipse(point, 5, 5)
        painter.fillPath(path, QColor(0, 255, 0, 128))
        painter.drawPath(path)

    # 重绘窗口事件
    def paintEvent(self, event):
        self.pixmap=self.copt_pixmap.copy()
        pp = QPainter(self.pixmap)
        pp.setPen(QPen(Qt.blue, 2))  # 设置画笔
        self.draw(pp)
        # 绘制直线
        pp.drawLine(self.beginPoint, self.endPoint)
        # 上一直线的终点就是下一直线的起点
        self.beginPoint = self.endPoint

        # 在画布上画出
        painter = QPainter(self)
        painter.drawPixmap(0, 0, self.pixmap)


    def wheelEvent(self, ev):
        mods = ev.modifiers()
        # print('mods=', mods)
        delta = ev.angleDelta()
        # print('delta=', delta)
        if QtCore.Qt.ControlModifier == int(mods):
            if int(delta.y()) > 0:
                print("ctrl 向上滚轮")
            else:
                print("ctrl 向下滚轮")

    def mousePressEvent(self, event):
        # 鼠标左键按下
        if event.button() == Qt.LeftButton:
            self.startPoint = event.pos()

    def mouseReleaseEvent(self, event):
        # 鼠标左键释放
        if event.button() == Qt.LeftButton:
            self.endPoint = event.pos()
            # 重新绘制
            self.update()

    def mouseMoveEvent(self, event):
        tmp1 = event.y()
        tmp2 = event.localPos().y()
        tmp3 = event.pos().y()
        tmp4 = event.windowPos().y()

        tmp5 = event.y() + self.y()
        
        tmp6 = event.screenPos().y()
        tmp7 = event.globalPos().y()
        print("所有点的位置:")
        print(tmp1)
        print(tmp2)
        print(tmp3)
        print(tmp4)
        print(tmp5)
        print(tmp6)
        print(tmp7)
        # 鼠标左键按下的同时移动鼠标
        if event.buttons() and Qt.LeftButton:
            self.endPoint = event.pos()
            # 重新绘制
            self.update()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoMouseEvent()
    window.show()
    sys.exit(app.exec())

通过运行代码可以发现:

tmp1 = event.y()
tmp2 = event.localPos().y()
tmp3 = event.pos().y()
tmp4 = event.windowPos().y()
上面四个是相对于父控件的坐标,搞编程都知道图像坐标是x轴是图像上面,y轴是图像左侧


tmp5 = event.y() + self.y()
上面这个是相对于窗口坐标
tmp6 = event.screenPos().y()
tmp7 = event.globalPos().y() 

上面这2行就是相当于屏幕左上角坐标了文章来源地址https://www.toymoban.com/news/detail-551004.html

到了这里,关于[pyqt5]关于在pyqt5界面上鼠标位置问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在pycharm里边配置pyqt5、qt5-applications,使用拖拽功能设计UI界面

    安装pyqt5和qt5-applications 网上很多说要安装pyqt5-tools,但是里边并没有找到designer.exe这个文件,最终是在qt5-applications里边的Qt/bin找到了designer.exe文件。 在pycharm中配置designer working directory可以自己手动配置工程目录,也可以直接点击后面的按钮选择$ProjectFileDir$ 在pycharm中配置p

    2024年02月02日
    浏览(49)
  • PyQt5设计好UI界面后,通过Python文件打开,控件集中在左上角问题解决方案

            在用PyQt5做GUI界面时遇到的一个问题,在QtDesigner预览的界面正常,但是转换成.py文件后show()出来的界面,控件都挤在左上角无法使用。 目录 一、问题 1.QtDesigner预览的界面正常​编辑 2.转换.py文件后通过show()方法,显示异常 二,解决方法 1.在MainWindow = QtWidgets.QM

    2024年02月04日
    浏览(47)
  • 【pyqt5】【多线程】【matplotlib】解决子线程上运行的matplotlib无法在主线程上的UI界面上绘制图形的问题

    在使用PyQt5为一个项目写UI界面的时候,我试图把matplotlib绘制的图像展示在UI界面的窗口中,但matplotlib是运行在一个子线程中的,这导致它出现了如下警告: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail. 并且我无法使用 matplotlib.backends.backend_qt5agg 下的 Figur

    2024年02月08日
    浏览(51)
  • pyqt5界面自适应

    打开Qt Designer 创建一个窗体 假设界面控件需要这样的,想让这些控件跟着窗体任意大小  如果没有设计好这个控件之间的布局,直接将这个窗体创建布局(即在空白处右键点击布局选择符合的布局)会导致根据所选的布局直接把所有的控件移位。比如点击了垂直布局,就直接

    2024年02月11日
    浏览(39)
  • pyqt5优化美化界面代码

    自用的pyqt5界面优化美化代码,方便自己写界面时复制,也顺便造福广大网友吧! 首先安装基础工具: Pycharm配置QtDesigner(PyUIC、PyRcc ) 并懂得如何规范化创建qt界面: QtDesigner规范创建应用界面 文章将持续更新....... 鼠标不置于其上效果: 鼠标置于其上但不点击效果: 点击效

    2024年02月03日
    浏览(48)
  • PyQt5登录界面跳转

    目录 1、设计ui界面 2、设计逻辑代码,实现登录界面跳转 3、结果 1、设计ui界面 设计后的ui界面 在这里可以设置密码不显示 这里可以设置快捷键 最后将ui界面转为py文件后获得的逻辑代码为:(文件名为 Login.py ) 2、设计逻辑代码,实现登录界面跳转 这里登录后,我们转到

    2024年02月12日
    浏览(42)
  • [pyqt5]触发ctrl+鼠标滚轮事件

    有时候我们需要按住Ctrl+鼠标滚轮实现图像放大或者缩小,因此需要这个事件,具体看代码

    2024年02月13日
    浏览(49)
  • 界面开发(2)--- 使用PyQt5制作用户登陆界面

    上篇文章已经介绍了如何配置PyQt5环境,这篇文章在此基础上展开,主要记录一下如何使用 PyQt5 制作用户登陆界面,并对一些基础操作进行介绍。 下面是具体步骤,一起来看看吧! 1. 打开 Pycharm 中的 Qt Designer 工具。 2. 选择Main Window模式,创建界面窗口。 3. 移除菜单栏和状态

    2024年02月05日
    浏览(56)
  • 界面开发(1) --- PyQt5环境配置

    第一步:首先安装社区版Pycharm 下载地址:https://www.jetbrains.com/pycharm/download/#section=windows 第二步:安装Anaconda3,配置虚拟环境 下载地址:https://www.anaconda.com/ 第三步:安装 Python 第三方库,包括 pyqt5,pyqt5-tools 和 pyqt5designer 在cmd中使用 pip install pyqt5 , pip install pyqt5-tools , pip in

    2024年04月12日
    浏览(52)
  • 使用PYQT5设计登录界面并实现界面跳转

    目录   1 UI登录界面的布局 2 UI登录界面布局对应的代码 3 登录界面和界面跳转完整代码 4 跳转界面代码函数和优化界面代码 5 最终效果        其中, 欢迎使用 XXXX 软件管理员密码 使用的是左边功能的 label 类、 登录 使用的是左边功能的 Push Button 类、 管理员和密码的输入

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包