2011-01-07 89 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