Добавление элементов из словаря в словарь в Listbox, Tkinter, Python - PullRequest
0 голосов
/ 26 февраля 2019

Я делаю виджет с тройным списком с помощью Python tkinter.

Сначала у меня есть такой диктат:

testDict = {'animal': {'mammal': ['mouse', 'cat'], 'reptile': ['lizard', 'snake']}, 'food': {'meat': ['bacon', 'lamb', 'beef'], 'fruit': ['apple', 'pear', 'banana', 'kiwi']}}

Теперь я хочу иметь возможность: Шаг1,добавьте «животное» и «еду» в качестве темы в первый список, нажав кнопку «Добавить тему».Выберите ключ в первом списке, затем нажмите «Добавить тип», чтобы добавить во второй список соответствующие типы, например «фрукты» и «мясо» или «млекопитающие» и «рептилия».

Шаг 3.Выберите тип из второго списка и добавьте соответствующие элементы в третий список, например: «ящерица», «змея» или «яблоко», «груша», «банан», «киви» и т. Д.

Я застрял на шаге 3.

Мой код:

import tkinter as tk

from tkinter import *

from tkinter import ttk

root = Tk()

testDict = {'animal': {'mammal': ['mouse', 'cat'], 'reptile': ['lizard', 'snake']}, 'food': {'meat': ['bacon', 'lamb', 'beef'], 'fruit': ['apple', 'pear', 'banana', 'kiwi']}}

Box1 = tk.Listbox(height=8, width=50, borderwidth=2)
Box1.pack()
Box2 = tk.Listbox(height=8, width=50, borderwidth=2)
Box2.pack()
Box3 = tk.Listbox(height=8, width=50, borderwidth=2)
Box3.pack()


def addTheme():
    Box1.delete(0, END) 
    for themeName in testDict:
            Box1.insert(END, themeName)

def addType():
    getKey = str((Box1.get(ACTIVE)))
    Box1.get(ANCHOR)
    Box2.delete(0, END) 
    for itemType in testDict[getKey]:            
        Box2.insert(END, itemType)

#---------------------This is where the problem is ----------------------

def addName():
    getKey2 = str((Box2.get(ACTIVE)))
    Box2.get(ANCHOR)
    Box3.delete(0, END)
    for itemName2 in testDict[getKey2]:
        Box3.insert(END, itemName2)


themeButton = tk.Button( text = "Add Theme", command= lambda: addTheme())
themeButton.pack(side=TOP)

typeButton = tk.Button(text = "Add Type", command= lambda: addType())
typeButton.pack(side=TOP)

nameButton = tk.Button(text = "Add Name", command= lambda: addName())
nameButton.pack(side=TOP)


root.mainloop()

Можете ли вы помочь мне исправить кнопку addName, чтобы она работала?Любая помощь будет оценена.

Заранее спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

предложение stovfl работает как шарм.Спасибо людям за ваш вклад.

Я поместил исправленный код здесь:

import tkinter as tk

from tkinter import *

root = Tk()

testDict = {'animal': {'mammal': ['mouse', 'cat'], 'reptile': ['lizard', 'snake']}, 'food': {'meat': ['bacon', 'lamb', 'beef'], 'fruit': ['apple', 'pear', 'banana', 'kiwi']}}

Box1 = tk.Listbox(height=8, width=50, borderwidth=2)
Box1.pack()
Box2 = tk.Listbox(height=8, width=50, borderwidth=2)
Box2.pack()
Box3 = tk.Listbox(height=8, width=50, borderwidth=2)
Box3.pack()


def addTheme():
    Box1.delete(0, END) 
    for themeName in testDict:
            Box1.insert(END, themeName)

def addType():
    getKey1 = str((Box1.get(ACTIVE)))
    Box1.get(ANCHOR)
    Box2.delete(0, END) 
    for itemType in testDict[getKey1]:            
        Box2.insert(END, itemType)



def addName():

    getKey1_for_Box2 = str((Box1.get(ACTIVE)))
    getKey2 = str((Box2.get(ACTIVE)))
    Box2.get(ANCHOR)
    Box3.delete(0, END)
    for itemName2 in testDict[getKey1_for_Box2][getKey2]:
        Box3.insert(END, itemName2)



themeButton = tk.Button( text = "Add Theme", command= lambda: addTheme())
themeButton.pack(side=TOP)

typeButton = tk.Button(text = "Add Type", command= lambda: addType())
typeButton.pack(side=TOP)

nameButton = tk.Button(text = "Add Name", command= lambda: addName())
nameButton.pack(side=TOP)


root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...