1

嗨,所有的样子,也许能提供帮助。我是 Python 新手,也是一般的编码新手。我正在开发一个程序,它的基本概念是有几个列表,从一个列表中进行选择,然后根据第一个选择填充另一个列表。我已经能够创建 GUI,我已经能够创建各种不同形式的“列表框”,我已经能够按照教程展示如何检索该“列表框”的索引,但我还没有能够让第二个列表框填写我为在第一个框中做出的选择而创建的列表。我也尝试过复选框,我确实更接近那个,但仍然没有骰子。

下面提供的代码的工作原理是我可以将第二个列表打印到 python shell 中,但是当我在我的 GUI 中设置一个列表框时,我无法让它在那里填充。什么都没有发生。而且我知道我在此代码中没有列表框来填充第二个列表。因此,在这段代码中,如果是“Apples”,我希望选择“品牌”来填充列表框中的“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()
4

1 回答 1

1

要基于另一个列表框的选择来填充列表框,您需要将一个方法绑定到第一个列表框的选择。这是使用汽车品牌/型号的示例:

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()
于 2013-10-31T22:06:53.630 回答