Python 有没有办法知道QGridLayout中元素的X和Y坐标?

Python 有没有办法知道QGridLayout中元素的X和Y坐标?,python,pyqt,pyqt5,qgridlayout,Python,Pyqt,Pyqt5,Qgridlayout,我有一个QGridLayout,在这里我添加了不同的元素,我需要知道元素,我需要知道特定元素的坐标。有没有办法做到这一点? 我阅读了文档并尝试使用pos()和geometry()属性,但无法得到我想要的。 例如,给定以下代码: 导入系统 从PyQt5.QtWidgets导入(QWidget、QGridLayout、QPushButton、QApplication) 类basicWindow(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() 网格布局=Q

我有一个QGridLayout,在这里我添加了不同的元素,我需要知道元素,我需要知道特定元素的坐标。有没有办法做到这一点? 我阅读了文档并尝试使用pos()和geometry()属性,但无法得到我想要的。 例如,给定以下代码:

导入系统 从PyQt5.QtWidgets导入(QWidget、QGridLayout、QPushButton、QApplication) 类basicWindow(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() 网格布局=QGridLayout() self.setLayout(网格布局) 对于范围(3)内的x: 对于范围(3)内的y: 按钮=QPushButton(str(str(3*x+y))) grid_layout.addWidget(按钮,x,y) self.setWindowTitle('基本网格布局') 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplication(sys.argv) windowExample=basicWindow() windowExample.show() sys.exit(app.exec_())
有没有办法知道每个按钮的坐标

几何体仅在小部件显示时更新,因此您可能在显示它之前打印坐标。在下面的示例中,如果按任意按钮,它将打印相对于窗口的坐标

导入系统 从PyQt5.QtCore导入pyqtlot 从PyQt5.QtWidgets导入QWidget、QGridLayout、QPushButton、QApplication 类BasicWindow(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() 网格布局=QGridLayout(自) 对于范围(3)内的x: 对于范围(3)内的y: 按钮=QPushButton(str(3*x+y)) 按钮。单击。连接(单击时自行) grid_layout.addWidget(按钮,x,y) self.setWindowTitle(“基本网格布局”) @pyqtSlot() 已单击的def(自身): button=self.sender() 打印(button.text(),“:”,button.pos(),button.geometry()) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication(sys.argv) windowExample=BasicWindow() windowExample.show() sys.exit(app.exec_()) 输出:

0 : PyQt5.QtCore.QPoint(10, 10) PyQt5.QtCore.QRect(10, 10, 84, 34)
4 : PyQt5.QtCore.QPoint(100, 50) PyQt5.QtCore.QRect(100, 50, 84, 34)
8 : PyQt5.QtCore.QPoint(190, 90) PyQt5.QtCore.QRect(190, 90, 84, 34)
更新: 如果要获取给定行和列的小部件的位置,首先要获取QLayoutItem,并且必须从该QLayoutItem获取小部件。在以下示例中,按钮的位置在窗口显示后立即打印:

导入系统 从PyQt5.QtCore导入QTimer 从PyQt5.QtWidgets导入QWidget、QGridLayout、QPushButton、QApplication 类basicWindow(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() 网格布局=QGridLayout(自) 对于范围(3)内的x: 对于范围(3)内的y: 按钮=QPushButton(str(3*x+y)) grid_layout.addWidget(按钮,x,y) self.setWindowTitle(“基本网格布局”) QTimer.singleShot(0,lambda:self.print_坐标(1,1)) def打印_坐标(自身、x、y): grid\u layout=self.layout() it=网格布局。项目位置(x,y) w=it.widget() 打印(w.pos()) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication(sys.argv) windowExample=basicWindow() windowExample.show() sys.exit(app.exec_())
几何体仅在显示小部件时更新,因此您可能在显示之前打印坐标。在下面的示例中,如果按任意按钮,它将打印相对于窗口的坐标

导入系统 从PyQt5.QtCore导入pyqtlot 从PyQt5.QtWidgets导入QWidget、QGridLayout、QPushButton、QApplication 类BasicWindow(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() 网格布局=QGridLayout(自) 对于范围(3)内的x: 对于范围(3)内的y: 按钮=QPushButton(str(3*x+y)) 按钮。单击。连接(单击时自行) grid_layout.addWidget(按钮,x,y) self.setWindowTitle(“基本网格布局”) @pyqtSlot() 已单击的def(自身): button=self.sender() 打印(button.text(),“:”,button.pos(),button.geometry()) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication(sys.argv) windowExample=BasicWindow() windowExample.show() sys.exit(app.exec_()) 输出:

0 : PyQt5.QtCore.QPoint(10, 10) PyQt5.QtCore.QRect(10, 10, 84, 34)
4 : PyQt5.QtCore.QPoint(100, 50) PyQt5.QtCore.QRect(100, 50, 84, 34)
8 : PyQt5.QtCore.QPoint(190, 90) PyQt5.QtCore.QRect(190, 90, 84, 34)
更新: 如果要获取给定行和列的小部件的位置,首先要获取QLayoutItem,并且必须从该QLayoutItem获取小部件。在以下示例中,按钮的位置在窗口显示后立即打印:

导入系统 从PyQt5.QtCore导入QTimer 从PyQt5.QtWidgets导入QWidget、QGridLayout、QPushButton、QApplication 类basicWindow(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() 网格布局=QGridLayout(自) 对于范围(3)内的x: 对于范围(3)内的y: 按钮=QPushButton(str(3*x+y)) grid_layout.addWidget(按钮,x,y) self.setWindowTitle(“基本网格布局”) QTimer.singleShot(0,lambda:self.print_坐标(1,1)) def打印_坐标(自身、x、y): grid\u layout=self.layout() it=网格布局。项目位置(x,y) w=it.widget() 打印(w.pos()) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication(sys.argv) windowExample=basicWindow() windowExample.show() sys.exit(app.exec_())
请提供一个请提供一个谢谢!这正是我所想的。还有一件事,如果不使用on_clicked方法,获得坐标的好方法是什么?我想在第16行使用
grid\u layout.itemAtPosition(x,y).pos()
(就在您将按钮添加到小部件之后),但是这不起作用。谢谢,但是有没有办法“保存”变量中的坐标?类似于‘坐标=(x,y)’,其中x和y是对应的坐标。我试着这么做,但结果是