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))
我正在使用 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))