如何在python中使用Tkinter制作3(或4)个嵌套的绑定组合框?

安德鲁·希克斯

我正在尝试制作一个具有绑定下拉列表的GUI,该下拉列表依赖于以前的下拉列表。我试图实现的格式如下:

  1. 选择一个{level 1}
  2. 选择一个{level 2}-绑定到level 1
  3. 选择一个{level 3}-绑定到level 2
  4. 选择一个{level 4}-绑定到level 3

我一直在努力的代码如下所示。这是从这里派生的

import tkinter
from tkinter import ttk
root = tkinter.Tk()
''' 
widgets are added here 
'''
brands = ["Bugatti","BMW"]

models = [["Veyron","Golf"],
          ["330M"]]

Zip = [[["TEST1"],["TEST2"]],[["TEST3"]]]

car_brand = ttk.Combobox(root, width=37, value=(brands))
car_brand.grid(row=3, column=1, columnspan=2, padx=10, pady=2, sticky='w')

def callback(eventObject):
    abc = eventObject.widget.get()
    car = car_brand.get()
    index=brands.index(car)
    car_model.config(values=models[index])

car_model = ttk.Combobox(root, width=37)
car_model.grid(row=4, column=1, columnspan=2, padx=10, pady=2, sticky='w')
car_model.bind('<Button-1>', callback)

def callback2(eventObject):
    abc = eventObject.widget.get()
    y = car_model.get()
    index=models.index(y)
    xx.config(values=Zip[index])

xx = ttk.Combobox(root, width=37)
xx.grid(row=5, column=1, columnspan=2, padx=10, pady=2, sticky='w')
xx.bind('<Button-1>', callback2)

root.mainloop()

我可能真的很亲密,但是我需要一些帮助才能使其正常工作。

更新:谢谢@JacksonPro的回答。我需要稍微调整一下以允许网格放置。见下文:

import tkinter as tk
from tkinter import ttk



cars = {"Bugatti":["Veyron","Golf"] ,"BMW":["330M"]}

_zip = [[["TEST1"],["TEST11"]],[["TEST2"],["Hello"],["World"]],["TEST3"]]

lst = [x for y in list(cars.values()) for x in y]


def change_dropdown(*args):

    print("Chosen brand " + tkvar.get())

    if args[0] == 'PY_VAR0':
        for x, y in cars.items():
            if tkvar.get() == x:
                tkvar2.set(y[0])
                popupMenu2.configure(values=y)
        
    if args[0] == 'PY_VAR1':
        for x, y in zip(lst, _zip):
            if tkvar2.get() == x:            
                tkvar3.set(y[0])
                popupMenu3.configure(values=y)
        
    return
    
root = tk.Tk()
# canvas = tk.Canvas(root, height=500, width= 500, bg="white")
root.geometry('500x100')
font = ("Courier", 16, "bold")
# canvas.pack()

tkvar = tk.StringVar(root)
tkvar.trace('w', change_dropdown)

tkvar2 = tk.StringVar(root)
tkvar2.trace('w', change_dropdown)

tkvar3 = tk.StringVar(root)

labelTop = tk.Label(root, text = "Select a State")
labelTop.grid(column=0, row=0)
popupMenu1 = ttk.Combobox(root, textvariable=tkvar, values=list(cars.keys()))
popupMenu1.grid(row=0, column=1)
# popupMenu1.pack()

popupMenu2 = ttk.Combobox(root, textvariable=tkvar2, values=[])
popupMenu2.grid(row=1, column=1)
# popupMenu2.pack()

popupMenu3 = ttk.Combobox(root, textvariable=tkvar3, values=[])
popupMenu3.grid(row=2, column=1)
# popupMenu3.pack()

root.mainloop()
杰克逊

这是一个解决方案,您也可以通过添加邮政编码来进一步改进。

import tkinter as tk
from tkinter import ttk

cars = {"Bugatti":["Veyron","Golf"] ,"BMW":["330M"]}
    

def change_dropdown(*args):

    print("Chosen brand " + tkvar.get())

    for x, y in cars.items():
        if tkvar.get() == x:
            tkvar2.set(y[0])
            popupMenu2.configure(values=y)
        
     
root = tk.Tk()
canvas = tk.Canvas(root, height=500, width= 500, bg="white")
canvas.pack()

tkvar = tk.StringVar(root)

tkvar2 = tk.StringVar(root)

tkvar3 = tk.StringVar(root)

popupMenu1 = ttk.Combobox(canvas, textvariable=tkvar, values=list(cars.keys()))
popupMenu1.pack()
popupMenu1.bind('<<comboboxselected>>', change_dropdown)

popupMenu2 = ttk.Combobox(canvas, textvariable=tkvar2, values=[])
popupMenu2.pack()
popupMenu1.bind('<<comboboxselected>>', change_dropdown)

popupMenu3 = ttk.Combobox(canvas, textvariable=tkvar3, values=[])
popupMenu3.pack()

root.mainloop()

更新:

这是功能齐全的代码:

import tkinter as tk
from tkinter import ttk

cars = {"Bugatti":["Veyron","Golf"] ,"BMW":["330M"]}

_zip = [["TEST1"],["TEST2"],["TEST3"]]

lst = [x for y in list(cars.values()) for x in y]


def change_dropdown(*args):

    print("Chosen brand " + tkvar.get())

    if args[0] == 'PY_VAR0':
        for x, y in cars.items():
            if tkvar.get() == x:
                tkvar2.set(y[0])
                popupMenu2.configure(values=y)
        
    if args[0] == 'PY_VAR1':
        for x, y in zip(lst, _zip):
            if tkvar2.get() == x:            
                tkvar3.set(y[0])
                popupMenu3.configure(values=y)
        
    return
    
root = tk.Tk()
canvas = tk.Canvas(root, height=500, width= 500, bg="white")
canvas.pack()

tkvar = tk.StringVar(root)
tkvar.trace('w', change_dropdown)

tkvar2 = tk.StringVar(root)
tkvar2.trace('w', change_dropdown)

tkvar3 = tk.StringVar(root)

popupMenu1 = ttk.Combobox(canvas, textvariable=tkvar, values=list(cars.keys()))
popupMenu1.pack()

popupMenu2 = ttk.Combobox(canvas, textvariable=tkvar2, values=[])
popupMenu2.pack()

popupMenu3 = ttk.Combobox(canvas, textvariable=tkvar3, values=[])
popupMenu3.pack()

root.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python中使用相同的键组合(附加值)两个嵌套字典?

来自分类Dev

如何在WPF MVVM中使用外键绑定组合框

来自分类Dev

需要帮助将多绑定的tkinter组合框python脚本调整为嵌套字典源

来自分类Dev

如何在MVC视图中使用jquery将数据绑定到组合框运行时?

来自分类Dev

如何在Sphinx中使用自动编号制作嵌套列表?

来自分类Dev

如何在toplevel()Tkinter中使用画布制作按钮

来自分类Dev

我如何使用tkinter(python 3)在for循环中为组合框赋予不同的变量名

来自分类Dev

如何在 Thymeleaf 中使用 ArrayList 填充组合框?

来自分类Dev

如何在嵌套的远程会话中使用Byobu键绑定?

来自分类Dev

如何在嵌套的远程会话中使用Byobu键绑定?

来自分类Dev

如何在Tkinter中禁用组合框?

来自分类Dev

如何使用嵌套字典作为源将文本块绑定到组合框

来自分类Dev

如何在Excel自动补全数字中制作一个组合框?

来自分类Dev

如何在VB.NET中使用不同的数据库表填充两个组合框

来自分类Dev

如何在 Ext.grid.Panel 中绑定两个组合框?

来自分类Dev

如何在 Python 3 中使用 OpenCV4 的 FastLineDetector?

来自分类Dev

如何在mysql中使用3个表创建嵌套查询

来自分类Dev

Python tkinter:在组合框中使用“ textvariable”似乎毫无用处

来自分类Dev

Python tkinter:在组合框中使用“ textvariable”似乎毫无用处

来自分类Dev

如何在小门上制作组合框?

来自分类Dev

如何在表单上制作可编辑的组合框

来自分类Dev

如何在两个函数Tkinter中使用root.after python

来自分类Dev

如何在python 3.4中使用tkinter添加2个滚动条?

来自分类Dev

如何在绑定中使用绑定

来自分类Dev

如何在python中制作嵌套字典?

来自分类Dev

如何在mysql和python中使用使用绑定变量

来自分类Dev

如何在Laravel 4雄辩的ORM中使用查询的IN或嵌套

来自分类Dev

如何在i3中使用一个键绑定启动两个应用程序?

来自分类Dev

如何在 Python 3 中使用条件解释嵌套字典列表理解

Related 相关文章

  1. 1

    如何在python中使用相同的键组合(附加值)两个嵌套字典?

  2. 2

    如何在WPF MVVM中使用外键绑定组合框

  3. 3

    需要帮助将多绑定的tkinter组合框python脚本调整为嵌套字典源

  4. 4

    如何在MVC视图中使用jquery将数据绑定到组合框运行时?

  5. 5

    如何在Sphinx中使用自动编号制作嵌套列表?

  6. 6

    如何在toplevel()Tkinter中使用画布制作按钮

  7. 7

    我如何使用tkinter(python 3)在for循环中为组合框赋予不同的变量名

  8. 8

    如何在 Thymeleaf 中使用 ArrayList 填充组合框?

  9. 9

    如何在嵌套的远程会话中使用Byobu键绑定?

  10. 10

    如何在嵌套的远程会话中使用Byobu键绑定?

  11. 11

    如何在Tkinter中禁用组合框?

  12. 12

    如何使用嵌套字典作为源将文本块绑定到组合框

  13. 13

    如何在Excel自动补全数字中制作一个组合框?

  14. 14

    如何在VB.NET中使用不同的数据库表填充两个组合框

  15. 15

    如何在 Ext.grid.Panel 中绑定两个组合框?

  16. 16

    如何在 Python 3 中使用 OpenCV4 的 FastLineDetector?

  17. 17

    如何在mysql中使用3个表创建嵌套查询

  18. 18

    Python tkinter:在组合框中使用“ textvariable”似乎毫无用处

  19. 19

    Python tkinter:在组合框中使用“ textvariable”似乎毫无用处

  20. 20

    如何在小门上制作组合框?

  21. 21

    如何在表单上制作可编辑的组合框

  22. 22

    如何在两个函数Tkinter中使用root.after python

  23. 23

    如何在python 3.4中使用tkinter添加2个滚动条?

  24. 24

    如何在绑定中使用绑定

  25. 25

    如何在python中制作嵌套字典?

  26. 26

    如何在mysql和python中使用使用绑定变量

  27. 27

    如何在Laravel 4雄辩的ORM中使用查询的IN或嵌套

  28. 28

    如何在i3中使用一个键绑定启动两个应用程序?

  29. 29

    如何在 Python 3 中使用条件解释嵌套字典列表理解

热门标签

归档