2011-01-07 91 views
0

我想在Tkinter中编写一个GUI来选择几个复杂的Python对象中的一个。它们代表来自数据库的记录;如果需要的话,我可以从地图中恢复它们的整数唯一ID。Tkinter控件的对象:如何超越StringVar,IntVar,DoubleVar,BooleanVar?

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

相反,没有小部件,更重要的是,没有变量类型处理除了字符串或字符串转换为数字和真值的任何东西。 我没有办法让我的任意对象回来,我不能让包含id值的列表,因为他们会显示id,而不是一个合理的字符串表示。

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

是否有可用于从变量中获取()对象或者在小部件中显示不是放入小部件变量中的字符串的奇异小部件或技巧? 我能想到的最好的方法是为命令动态生成lambdas的菜单,但它会很难看,可能太大。

+0

从各得到的字符串对象独特之处? – Brandon 2011-01-07 20:38:42

+0

在这种情况下,这太容易了。 – user412090 2011-01-26 16:05:32

回答

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