我有一个包含2列和3行的QGrid。第一列由QPushButtons组成,第二列由QLabel组成。 按钮=> [“这个按钮”,“那个按钮”,“一个按钮”]。所有标签都从文本0开始。连续按下按钮应该通过添加1来更改同一行中标签的文本(编号)。
以上是问题的简化版本,实际上我有10行以上,5列以上。
如何使用尽可能少的代码在网格中创建所有这些行和列?我如何将每个按钮链接到它的相应标签,而不必为每个单独的按钮创建一个功能?
答案 0 :(得分:1)
有几种方法可以解决它,我将展示一些:
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))