我已经做了很多研究,但到目前为止找不到任何有这个特定问题的人。非常抱歉,如果已经有一个主题,但无法找到它。
我想要做的是通过导入.txt文件并读出名称和值来在QGridLayout中找到QLabel。例如:power 5
现在我需要找到名为“power_fw”的QLabel,将此Label的文本设置为“5”
set_value("power 5")
def set_value(talent):
list_value = talent.split(" ") # Now i have a list with talent[0] = "power" and its value at talent[1] = "5"
talent_now = talent[0] + "_fw" # I already have the exact name of the QLabel i am trying to find, which would be "power_fw" at this moment
ui.talent_now.setText(talent[1]) # So the idea is that "talent_now" is a string whichs value is the name of the QLabel i am trying to set a new text. Obviously it does not work, because talent_now is not a QLabel but just its name.
我希望有人可以帮助我解决这个具体问题,再次,抱歉,如果这个话题已经存在某种方式。我找不到任何有用的东西。
我在这个问题的背景下发现有趣的主题:
get widgets by name from layout
findChild on object created within pyqt designer
这些主题中提供的解决方案都没有让我能够做到这一点。
您始终可以遍历布局项并检查每个窗口小部件objectName。
这是满足您要求的有效解决方案吗?
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel, QPushButton
from PyQt5.QtCore import pyqtSlot
if __name__ == '__main__':
app = QApplication(sys.argv)
label1 = QLabel()
label1.setText('label1')
label1.setObjectName('label1')
label2 = QLabel()
label2.setText('label2')
label2.setObjectName('label2')
btn = QPushButton("find label")
layout = QGridLayout()
layout.addWidget(label1, 0, 0)
layout.addWidget(label2, 0, 1)
layout.addWidget(btn, 1, 0, 1, 2)
w = QWidget()
w.setLayout(layout)
w.resize(500, 400)
w.show()
def find_label(event):
print('click')
childs_count = layout.count()
for c in range(childs_count):
w = layout.itemAt(c)
if w.widget().objectName() == 'label2':
print('FOUND widget: {}'.format(w.widget().objectName()))
btn.clicked.connect(find_label)
sys.exit(app.exec())
您可以使用QWidget::findChild
方法查找特定对象。当您需要递归搜索时,它非常有用:
label1 = QLabel()
label1.setObjectName("power")
label2 = QLabel()
label2.setObjectName("status")
label3 = QLabel()
label3.setObjectName("info")
w = QWidget()
layout = QVBoxLayout(w)
layout.addWidget(label1)
layout.addWidget(label2)
layout.addWidget(label3)
label = w.findChild(QLabel, "power")
label.setText("12")
w.show()