更新网格中各个行的标签的按钮
问题描述:
我有一个2列3行的QGrid。第一列由QPushButton组成,第二列由QLabel's组成。 按钮=> [“This Button”,“That Button”,“A Button”]。所有标签从文本开始0.按下连续按钮应改变同一行中标签的文本(编号),方法是加上1.更新网格中各个行的标签的按钮
以上是问题的简化版本,其中实际我有10多行,5列。
如何使用尽可能少的代码在网格中创建所有这些行和列?如何将每个按钮链接到相应的标签,而无需为每个单独的按钮创建一个功能?
答
有几种方法来解决它,我会显示一些:
- 拉姆达functios:
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))
+0
谢谢你的帮助!真正聪明的解决方案! – ZeZe
您可以通过先写入一行代码来创建所有这些行。这很简单。 –