为每一行更新网格中标签的按钮
Buttons that update labels in a grid for each respective row
我有一个 2 列 3 行的 QGrid。第一列由 QPushButtons 组成,第二列由 QLabel 组成。
按钮 => ["This Button"、"That Button"、"A Button"]。所有标签都从文本 0 开始。按一行中的按钮应该通过加 1 来更改同一行中标签的文本(数字)。
以上是问题的简化版本,实际上我有 10 多行和 5 多列。
如何使用尽可能少的代码在网格中创建所有这些行和列?我如何 link 每个按钮到它各自的标签,而不必为每个单独的按钮创建一个函数?
有几种方法可以解决,我会展示一些:
- lambda 函数:
class Widget(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
lay = QGridLayout(self)
for i in range(3):
btn = QPushButton("button-{}".format(i), self)
lbl = QLabel("{}".format(0))
lay.addWidget(btn, i, 0)
lay.addWidget(lbl, i, 1)
btn.clicked.connect(lambda checked, l=lbl: self.fun(l))
def fun(self, lbl):
n = int(lbl.text()) + 1
lbl.setText(str(n))
- 词典
class Widget(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
lay = QGridLayout(self)
self.connections = {}
for i in range(3):
btn = QPushButton("button-{}".format(i), self)
lbl = QLabel("{}".format(0))
lay.addWidget(btn, i, 0)
lay.addWidget(lbl, i, 1)
self.connections[btn] = lbl
btn.clicked.connect(self.fun)
def fun(self):
lbl = self.connections[self.sender()]
n = int(lbl.text()) + 1
lbl.setText(str(n))
我有一个 2 列 3 行的 QGrid。第一列由 QPushButtons 组成,第二列由 QLabel 组成。 按钮 => ["This Button"、"That Button"、"A Button"]。所有标签都从文本 0 开始。按一行中的按钮应该通过加 1 来更改同一行中标签的文本(数字)。
以上是问题的简化版本,实际上我有 10 多行和 5 多列。
如何使用尽可能少的代码在网格中创建所有这些行和列?我如何 link 每个按钮到它各自的标签,而不必为每个单独的按钮创建一个函数?
有几种方法可以解决,我会展示一些:
- lambda 函数:
class Widget(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
lay = QGridLayout(self)
for i in range(3):
btn = QPushButton("button-{}".format(i), self)
lbl = QLabel("{}".format(0))
lay.addWidget(btn, i, 0)
lay.addWidget(lbl, i, 1)
btn.clicked.connect(lambda checked, l=lbl: self.fun(l))
def fun(self, lbl):
n = int(lbl.text()) + 1
lbl.setText(str(n))
- 词典
class Widget(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
lay = QGridLayout(self)
self.connections = {}
for i in range(3):
btn = QPushButton("button-{}".format(i), self)
lbl = QLabel("{}".format(0))
lay.addWidget(btn, i, 0)
lay.addWidget(lbl, i, 1)
self.connections[btn] = lbl
btn.clicked.connect(self.fun)
def fun(self):
lbl = self.connections[self.sender()]
n = int(lbl.text()) + 1
lbl.setText(str(n))