2013-10-30 215 views
1

嗨,所有的樣子,並可能能夠提供幫助。我對Python很陌生,一般都是編碼。我正在研究一個程序,它的基本概念是有幾個列表,從一個列表中選擇一個,然後根據第一個選擇填充另一個列表。我已經能夠創建圖形用戶界面,我已經能夠創建各種不同形式的「列表框」,我已經能夠遵循教程來展示如何檢索「列表框」的標記,但是我沒有能夠獲得第二個列表框來填寫我爲第一個框中的選擇創建的列表。我也嘗試過複選框,我在那一個上靠得更近,但仍然沒有骰子。從選擇填充列表框,python

下面提供的代碼的意義在於我可以將第二個列表打印到python shell中,但是當我在我的GUI中設置了一個列表框時,我無法將它填充到那裏。沒有發生任何事情而且我知道在這段代碼中我沒有一個列表框來讓它填充第二個列表。所以在這段代碼中,我想'品牌'的選擇,如果'蘋果',來填充列表框中'modelA'列表。或者,如果複選框實際上不存在,並且「品牌」中的項目位於自己的列表框中。任何方向都可能比我所能做的更多。再次感謝。

的Python 3.3.2 的Mac OS X 10.8.5

from tkinter import * 

    #brand would be for first listbox or checkboxes 
    brand = ['Apples','Roses', 'Sonic', 'Cats'] 

    #model* is to be filled into the 2nd listbox, after selection from brand 
    modelA = ['Ants', 'Arrows', 'Amazing', 'Alex'] 
    modelR = ['Early', 'Second', 'Real'] 
    modelS= ['Funny', 'Funky'] 
    modelC= ['Cool', 'Daring', 'Double'] 

    #create checkboxes 
    def checkbutton_value(): 
     if(aCam.get()): 
      print("Models are: ", modelA) 

     if(rCam.get()): 
      print("Models are: ", modelR) 

     if(sCam.get()): 
      print("Models are: ", modelS) 

     if(cCam.get()): 
      print("Models are: ", modelC) 

    #create frame, and check checkbuttons state, print value of model 
    root = Tk() 
    aCam = IntVar() 
    rCam = IntVar() 
    sCam = IntVar() 
    cCam = IntVar() 

    #Checkbutton functions 
    apples = Checkbutton(root, text = "Apples", variable=aCam, command=checkbutton_value) 
    apples.pack(anchor="w") 
    roses = Checkbutton(root, text = "Roses", variable=rCam, command=checkbutton_value) 
    roses.pack(anchor="w") 
    sonic = Checkbutton(root, text = "Sonic", variable=sCam, command=checkbutton_value) 
    sonic.pack(anchor="w") 
    cats = Checkbutton(root, text = "Cats", variable=cCam, command=checkbutton_value) 
    cats.pack(anchor="w") 

    #general stuff for GUI 
    root.title('My Brand') 
    root.geometry("800x300") 
    root.mainloop() 

回答

0

要填充基於另一個列表框的選擇列表框,你需要綁定到第一個列表框的選擇的方法。下面是使用品牌/汽車模型的例子:

import Tkinter 


class Application(Tkinter.Frame): 
    def __init__(self, master): 
     Tkinter.Frame.__init__(self, master) 
     self.master.minsize(width=512, height=256) 
     self.master.config() 
     self.pack() 

     self.main_frame = Tkinter.Frame() 
     self.main_frame.pack(fill='both', expand=True) 

     self.data = { 
      'Toyota': ['Camry', 'Corolla', 'Prius'], 
      'Ford': ['Fusion', 'Focus', 'Fiesta'], 
      'Volkswagen': ['Passat', 'Jetta', 'Beetle'], 
      'Honda': ['Accord', 'Civic', 'Insight'] 
     } 

     self.make_listbox = Tkinter.Listbox(self.main_frame) 
     self.make_listbox.pack(fill='both', expand=True, side=Tkinter.LEFT) 

     # here we bind the make listbox selection to our method 
     self.make_listbox.bind('<<ListboxSelect>>', self.load_models) 

     self.model_listbox = Tkinter.Listbox(self.main_frame) 
     self.model_listbox.pack(fill='both', expand=True, side=Tkinter.LEFT) 

     # insert our items into the list box 
     for i, item in enumerate(self.data.keys()): 
      self.make_listbox.insert(i, item) 

    def load_models(self, *args): 
     selection = self.make_listbox.selection_get() 

     # clear the model listbox 
     self.model_listbox.delete(0, Tkinter.END) 

     # insert the models into the model listbox 
     for i, item in enumerate(self.data[selection]): 
      self.model_listbox.insert(i, item) 

root = Tkinter.Tk() 
app = Application(root) 
app.mainloop() 
+0

感謝晚五....我已經向前移動,並已經能夠看到我需要使用綁定...我看到雖然我的代碼相比較,雖然我在那裏遇到了問題,可能實際上幫助我解決了現在使用.csv文件和導入到字典中的問題。謝謝你。 –

+0

太好了,很高興幫助! – Fiver