【问题标题】:Listbox listvariable.get() returns tuple, but is handled like string?列表框 listvariable.get() 返回元组,但像字符串一样处理?
【发布时间】:2020-05-18 13:52:59
【问题描述】:

在一个类中工作,我试图在列表框中获取所选项目,但是当我应用选择索引时,元组似乎变成了一个字符串。

def __init__(self, parent):
    # <---snip--->
    self.part_no = tk.StringVar()
    self.part_listbox = tk.Listbox(self, listvariable=self.part_no, selectmode='multiple')
    # <---snip--->

def load_part(self):

    part_list = self.part_no.get() # tuple of strings
    selection = self.part_listbox.curselection() # tuple of integers

    load_list = [part_list[item] for item in selection] # list of characters???
    print(part_list, selection, load_list)

选择前三个值(并使用 load_part 命令按下按钮)给我输出:

('101', '201', '301', '401', '501') (0, 1, 2) ['(', "'", '1']

我预计:

('101', '201', '301', '401', '501') (0, 1, 2) ['101', '201', '301']

有人能告诉我这里发生了什么吗?

Python 3.8.2、Tkinter 8.6

【问题讨论】:

  • part_list 是元组而不是元组的字符串表示形式。
  • 是什么让你认为StringVar.get() 应该返回一个元组而不是一个字符串?
  • 使用ast.literal_eval 真正得到一个字符串元组,即part_list = ast.literal_eval(self.part_no.get())
  • 谢谢@AlbinPaul,当然是这样。
  • @quamrana,因为我误解了 Stack Overflow 上的另一篇文章,输出看起来像一个元组,这强化了我的误解。

标签: python tkinter listbox tuples


【解决方案1】:

答案:因为前提是假的。

listvariable.get() 返回一个字符串,而不是一个元组。

经验教训:始终仔细检查对象类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多