来自Tkinter控件的对象:如何超越StringVar,IntVar,DoubleVar,BooleanVar?

时间:2011-01-07 19:09:41

标签: python tkinter

我正在尝试在Tkinter中编写一个GUI来从几个复杂的Python对象中选择一个。它们代表数据库中的记录;如果需要,我可以从给定整数唯一ID的地图中恢复对象。

在理想的世界中,Listbox和OptionMenu小部件将接受一系列任意对象和一个函数来调用以获取要从这些任意对象显示的字符串;并且它们的变量会给出其中一个对象,而不会产生不必要的转换。

相反,没有小部件,更重要的是,没有变量类型处理除字符串或字符串转换为数字和真值之外的任何内容。 我无法恢复我的任意对象,并且我无法创建包含id值的列表,因为它们会显示id,而不是合理的字符串表示。

作为测试,我将带有StringVar的元组放在OptionMenu中,并将它们转换为字符串。

我是否可以使用异常的小部件或技术来从变量中获取()对象,或者在小部件中显示一个不是放在小部件变量中的字符串? 我能想到的最好的方法是一个充满动态生成的命令lambdas的菜单,但它很难看,而且可能太大了。

1 个答案:

答案 0 :(得分:0)

我做了什么来解决这个问题,至少我的ListBox是有一个数组代表列表中的所有数据。假设complexobjects是您的对象列表,

for obj in complexobjects:
    listbox.insert(END, str(complexobjects))

str(complexobjects)替换为您想要的字符串 代表是。您无需存储或查找,只需使用 索引,

selitems = [complexobjects[int(idx)] for idx in listbox.curselection()]

阅读本页http://effbot.org/tkinterbook/listbox.htm