PyQt5获取点击了网格布局的第几个位置

PyQt5 中,可以通过绑定每个网格位置组件的 鼠标事件 来实现

举一个例子,就是我现在有6个标签,以网格布局方式排布,如下:

在这里插入图片描述

我想实现效图为:点击1得到他在网格布局中的位置(0,0),点击2得到(0,1),点击4得到(1,0),如果要得到顺序位置也很简单。

在这里插入图片描述

实现步骤:

分别为每个QLabel绑定鼠标点击事件

for label in self.findChildren(QLabel):
	label.mouseDoubleClickEvent = lambda event: self.setLabelEvent(event)

其中 for label in self.findChildren(QLabel): 是获取当前窗口的所有QLabel组件,起到过滤的作用,之后遍历每个 QLabel 组件,为他们绑定鼠标双击事件。

之后就可以使用如下代码来获取当前的 QLabel 在网格布局中的 行与列 的信息

# 获取点击位置
position = self.widget.layout().indexOf(clickedLabel)
row, column, _, _ = self.widget.layout().getItemPosition(position)

代码如下:

class Window(QMainWindow, Ui_MainWindow):

    def __init__(self):
        super(Window, self).__init__()
        # 设置主界面的UI
        self.setupUi(self)

        # 连接信号与槽
        self.signal()

	# 连接信号与槽函数
    def signal(self):
        for label in self.findChildren(QLabel):
            label.mouseDoubleClickEvent = lambda event: self.setLabelEvent(event)

    def setLabelEvent(self, event):
        # 判断是否是按下了左键
        if event.button() == QtCore.Qt.LeftButton:
            # 获取鼠标点击的组件
            widget = QtWidgets.QApplication.widgetAt(event.globalPos())

            # 控件是 QLabel 类型
            clickedLabel = widget

            # 获取点击位置
            position = self.widget.layout().indexOf(clickedLabel)
            row, column, _, _ = self.widget.layout().getItemPosition(position)

            self.label_7.setText(f"您点击了 ({
      
      row}, {
      
      column})")

猜你喜欢

转载自blog.csdn.net/m0_47256162/article/details/129927364
今日推荐