我在initUI(self)中使用以下内容创建这些标签:
for row in range(4):
tmp = 0
for col in range(4):
square = QtWidgets.QLabel(self)
square.setPixmap(QtGui.QPixmap('img/tab.png'))
#self.gridLayout.addWidget(square, row, col)
#setattr(self, 'label_ligne_{}_{}'.format(row + 1, col + 1), square)
label_name='label_ligne_{}_{}'.format(row + 1, col + 1)
square.setObjectName(label_name)
if row <1:
test=300
elif row <2:
test=385
elif row <3:
test=470
else:
test =555
square.move(300 + tmp, test)
square.installEventFilter(self)
print(square.objectName())
tmp += 85
我想在由按钮触发的函数中访问其中一些标签:
@pyqtSlot()
def on_click(self):
print('PyQt5 button click')
def move_ligne_one(self):
for btn in (
self.label_ligne_1_1,
self.label_ligne_1_2,
self.label_ligne_1_3,
self.label_ligne_1_4,
):
if self.label_ligne_1_4.x() > 300:
p = btn.pos()
p -= QtCore.QPoint(85, 0)
btn.move(p)
我需要按相应的按钮分别移动每行标签。但是我不能使用我指定的名称来引用标签
您可以使用^{} 和^{} :
请注意,使用PyQt有more overloads种方法,它们的参数略有不同,您可能对其中的第一种方法感兴趣:
请注意,如果使用
setattr
,您可以通过调用getattr
以类似的方式访问小部件:无论如何,如果您要有固定数量的行和列,一种更简单、更好的方法是创建小部件的“矩阵”:
通过这种方式,您可以通过每个项目的位置来访问它们,这比依赖对象名称或实例属性要好
相关问题 更多 >
编程相关推荐