将变量插入另一个变量的名称

时间:2019-11-12 19:15:34

标签: python string user-interface variables pyqt5

很抱歉,这个问题的措词不好,因为我什至不知道Google会用它来表达真正的有效问题。

简而言之,我有很多具有相同命名约定的UI元素,而不是列出数百行代码,我想做一个简单的for循环(列表范围)来填充信息。

我的例子

var = "name"

{var}_label.text("Name?")
{var}_textEdit.setText("")

我想要类似的东西,它将知道(在此示例中)为name_label.text和name_textEdit。有办法吗?

一个真实的示例(不是完整的工作代码,但是您可以看到问题):

if self.date_edit.text() == "":
QMessageBox.warning(self, "Warning", f"You need to fill out an date header.")
return

在此示例中,应该能够同时在UI变量名称和消息框文本中填充“日期”。

我尝试过的代码:

my_list = ["date_edit", "date_label"]

for item in range(len(my_list)):
    print(item)
    self.my_list[item].setText("hey")

错误:AttributeError:'Ui'对象没有属性'my_list'

但是有一个self.date_edit

有效代码的最终示例:

my_list = ["date"]

for item in range(len(my_list)):
    d = self.__dict__
    label = d.get(f'{my_list[item]}_label')
    text_edit = d.get(f'{my_list[item]}_edit')
    if label:
        label.setText("Name?")
    if text_edit:
        text_edit.setText("WOW")

谢谢大家的帮助:)。

1 个答案:

答案 0 :(得分:1)

也许您可以从对象的变量字典中获取它们并将它们分配给新的变量名称?

var = 'test'

d = self.__dict__
label = d.get(f'{var}_label')
text_edit = d.get(f'{var}_textEdit')
if label:
    label.text("Name?")
if text_edit:
    text_edit.setText("")
相关问题