我已经做了大量研究,但到目前为止,找不到任何遇到此特定问题的人。非常抱歉,如果已经有一个主题,但找不到它。
我想做的是通过导入.txt文件并读出名称和值在QGridLayout中找到QLabel。
例如:
power 5
现在,我需要找到名为“ power_fw” 的QLabel,以将此标签的文本设置为“ 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
这些主题提供的解决方案都无法使我正确地做到这一点。
答案 0 :(得分:0)
您始终可以遍历布局项并检查每个小部件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())
答案 1 :(得分:0)
您可以使用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()