【发布时间】:2019-11-12 19:15:34
【问题描述】:
很抱歉,这个问题的措辞很糟糕,因为我什至不知道用来谷歌它的术语,甚至可以得到一个真正有效的问题。
简而言之,我有很多具有相同命名约定的 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")
感谢大家的帮助:)。
【问题讨论】:
-
为什么不把它们放在一个列表或字典里?
-
你能给我举个例子来说明你将如何实现它吗?我知道如何遍历列表,但我不确定如何将变量名称插入 UI 元素名称,因为它是变量的名称。我正在尝试嵌套变量以创建变量名,这就是我坚持的部分。
-
elements = {"name": (the_label, the_textEdit)}。然后elements["name"]获取标签/编辑对。我将它作为元素的元组。根据具体情况,它也可以是一个列表或其他一些结构。 -
那么我如何将它插入到另一个变量名中呢?例如它将是 self.name[0].setText()?
-
@ScottUlmer 你真的不应该使用这样的动态变量。有很多方法,但几乎可以肯定的是,有更好的方法来完成你想要完成的任何事情,可能只是使用像
list或dict这样的容器 /跨度>
标签: python string user-interface variables pyqt5