PyQt - 获取网格中单击按钮的行和列

PyQt - get row and column of clicked button in grid

我正在使用 PyQt 开发一个扫雷应用程序,运行 遇到了一个问题,如何 return 在网格布局中点击按钮的一行和一列?下面是演示问题的尽可能少的示例。我的代码总是 return 最后一行和最后一列,我不知道如何修复它。我尝试的其他方法是使用 2D 列表,但仍然无法正常工作。

from PyQt5 import QtWidgets, QtCore, QtGui
import sys


class ApplicationWindow(QtWidgets.QWidget):

def __init__(self, size):
    super(ApplicationWindow, self).__init__()
    self.setGeometry(0, 0, 600, 400)
    self.setWindowTitle('MineSweeper')
    self.size = size
    self.grid_layout = QtWidgets.QGridLayout()   
    self.grid_layout.setSpacing(0)
    self.create_grid(self.size)
    self.setLayout(self.grid_layout)

def create_grid(self):        
    for row in range(self.size):
        for col in range(self.size):
            grid_button = QtWidgets.QPushButton()
            grid_button.clicked.connect(lambda: self.tell_me(row, col))
            grid_button.setFixedSize(30, 30)
            grid_button.setStyleSheet('background-color : rgba(0, 0, 0, 100); border :1px solid rgba(0, 0, 0, 150)')
            self.grid_layout.addWidget(grid_button, row, col)

def tell_me(self, row, col):
    print(row, col)


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

更新: 所以我设法 return 正确的列数,但是当我更改 lambda 函数时,我的行数一直为 False

grid_button.clicked.connect(lambda r=row, c=col: self.tell_me(r, c))

clicked 信号总是有一个用于检查状态的 bool 参数,您也必须在 lambda 中考虑到这一点,因为它是第一个参数所使用的。

grid_button.clicked.connect(lambda _, r=row, c=col: self.tell_me(r, c))