栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyqt5鼠标点击事件_pyqt5获取鼠标点击的控件?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyqt5鼠标点击事件_pyqt5获取鼠标点击的控件?

在PyQt5中想要实现追踪鼠标的坐标,并实现实时打印出来,需要开启鼠标追踪功能。如果想要界面中的所有组件,或者QDialog弹窗获取坐标点,那么每个组件都需要做如下设置

setMouseTracking(True)

注意:

如果重写了一个组件,想要组件获取鼠标坐标,且组件为弹窗式,这样需要在重写的组件中加上

mouseMoveEvent方法
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog
# 自定义QDialog组件,增加最大化最小化按钮
class My_Dialog(QDialog):
    def __init__(self, parent=None):
        super(My_Dialog, self).__init__(parent)
        self.setupUi()

    def setupUi(self):
        # self.setWindowFlags(Qt.framelessWindowHint)  # 去除边框
        self.setWindowFlags(Qt.Dialog | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint)  # 最大化最小化关闭按钮
        pass

    def mouseMoveEvent(self, QMouseEvent):  # 5
        x = QMouseEvent.x()
        y = QMouseEvent.y()
        global_x = QMouseEvent.globalX()
        global_y = QMouseEvent.globalY()

        print(x, y)

下面是一个例子,主窗口有几个组件,外加一个按钮,点击按钮会弹出QDialog窗口,重写了QDialog窗口,鼠标在QDialog窗口滑动时,也会触发打印坐标点的事件

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(561, 335)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
        self.mdiArea.setObjectName("mdiArea")
        self.horizontalLayout.addWidget(self.mdiArea)
        self.start_btn = QtWidgets.QPushButton(self.centralwidget)
        self.start_btn.setObjectName("start_btn")
        self.horizontalLayout.addWidget(self.start_btn)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 561, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.dockWidget_2 = QtWidgets.QDockWidget(MainWindow)
        self.dockWidget_2.setObjectName("dockWidget_2")
        self.dockWidgetContents_2 = QtWidgets.QWidget()
        self.dockWidgetContents_2.setObjectName("dockWidgetContents_2")
        self.dockWidget_2.setWidget(self.dockWidgetContents_2)
        MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dockWidget_2)

        self.retranslateUi(MainWindow)
        QtCore.QmetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.start_btn.setText(_translate("MainWindow", "start"))


import sys

from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog


# 自定义QDialog组件,增加最大化最小化按钮
class My_Dialog(QDialog):
    def __init__(self, parent=None):
        super(My_Dialog, self).__init__(parent)
        self.setupUi()

    def setupUi(self):
        # self.setWindowFlags(Qt.framelessWindowHint)  # 去除边框
        self.setWindowFlags(Qt.Dialog | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint)  # 最大化最小化关闭按钮
        pass

    def mouseMoveEvent(self, QMouseEvent):  # 5
        x = QMouseEvent.x()
        y = QMouseEvent.y()
        global_x = QMouseEvent.globalX()
        global_y = QMouseEvent.globalY()

        print(x, y)


class Test(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Test, self).__init__()
        # 启动界面,所有需要在init进行初始化的函数跟事件,都要在初始化之后进行
        self.setupUi(self)

        self.start_btn.clicked.connect(self.show_widget)
        self.setMouseTracking(True)
        self.centralwidget.setMouseTracking(True)
        self.start_btn.setMouseTracking(True)
        self.dockWidget_2.setMouseTracking(True)
        self.mdiArea.setMouseTracking(True)

    def show_widget(self):
        self.dialog = My_Dialog(self)
        self.dialog.setMouseTracking(True)
        print(self.dialog.hasMouseTracking())       # 返回设置的状态
        self.dialog.resize(200, 200)
        self.dialog.show()


    def mousePressEvent(self, event):
        if event.buttons() == QtCore.Qt.LeftButton:  # 左键按下
            # self.setText("单击鼠标左键的事件: 自己定义")
            print("单击鼠标左键")  # 响应测试语句
        elif event.buttons() == QtCore.Qt.RightButton:  # 右键按下
            # self.setText("单击鼠标右键的事件: 自己定义")
            print("单击鼠标右键")  # 响应测试语句
        elif event.buttons() == QtCore.Qt.MidButton:  # 中键按下
            # self.setText("单击鼠标中键的事件: 自己定义")
            print("单击鼠标中键")  # 响应测试语句
        elif event.buttons() == QtCore.Qt.LeftButton | QtCore.Qt.RightButton:  # 左右键同时按下
            # self.setText("同时单击鼠标左右键的事件: 自己定义")
            print("单击鼠标左右键")  # 响应测试语句
        elif event.buttons() == QtCore.Qt.LeftButton | QtCore.Qt.MidButton:  # 左中键同时按下
            # self.setText("同时单击鼠标左中键的事件: 自己定义")
            print("单击鼠标左中键")  # 响应测试语句
        elif event.buttons() == QtCore.Qt.MidButton | QtCore.Qt.RightButton:  # 右中键同时按下
            # self.setText("同时单击鼠标右中键的事件: 自己定义")
            print("单击鼠标右中键")  # 响应测试语句
        elif event.buttons() == QtCore.Qt.LeftButton | QtCore.Qt.MidButton 
                | QtCore.Qt.RightButton:  # 左中右键同时按下
            # self.setText("同时单击鼠标左中右键的事件: 自己定义")
            print("单击鼠标左中右键")  # 响应测试语句

    def mouseMoveEvent(self, event):
        globalPos = self.mapToGlobal(event.pos())
        x = globalPos.x()
        y = globalPos.y()
        print(x, y)




if __name__ == '__main__':
    # PyQt5高清屏幕自适应设置
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    app = QApplication(sys.argv)
    main_win = Test()

    main_win.show()
    sys.exit(app.exec_())





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号