【问题标题】:Insert a Variable into the Name of Another Variable [duplicate]将变量插入另一个变量的名称中[重复]
【发布时间】: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 你真的不应该使用这样的动态变量。有很多方法,但几乎可以肯定的是,有更好的方法来完成你想要完成的任何事情,可能只是使用像listdict 这样的容器 /跨度>

标签: python string user-interface variables pyqt5


【解决方案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("")

【讨论】:

  • 我试过了,我得到了 "None" ,我试着改变了一点,我得到了 "AttributeError: 'Ui' object has no attribute 'label'"
  • if label: 旨在防止变量不在locals 中的可能性。也许它在您的globals 中?您确定该对象存在吗?
  • 所以我在 if 标签内做了一个简单的 print("here") ,但它从未打印出来。我认为问题在于它在班级内。标签的正确名称是 self.date_label,正确的代码是 self.date_label.setText("")
  • 然后用local()代替self.__dict__
  • 你是个天才,非常感谢你:D。
猜你喜欢
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2018-02-01
  • 2015-12-16
相关资源
最近更新 更多