Я довольно новичок в Python, и, потратив много часов, мне удалось заставить это работать без необходимости задавать вопрос, однако, определенно кажется, что его можно переписать лучше и таким образом, чтобы избавиться от этого KeyError: ''
. Ключевая ошибка появляется (и останавливает функцию) только до тех пор, пока я не выберу элемент из каждого выпадающего списка, затем она возобновляется из-за моей математики в функции, но я не могу найти другой способ написать ее, которая решит эту проблему исделать код более компактным. Я уверен, что есть способ, но я определенно мог бы использовать указатель в правильном направлении, спасибо! Вот более простая демонстрационная версия моей программы:
import tkinter as tk
import tkinter.ttk as ttk
#DICTIONARIES#
weapondict = {"Bronze Sword": {"atk":32, "def":4}, "Iron Sword": {"atk":47, "def":5}}
shielddict = {"Bronze Shield": {"atk":3, "def":10}, "Iron Shield": {"atk":5, "def":27}}
#FUNCTION#
def selected(func):
a = weapondict[weaponvar.get()]["atk"]
b = shielddict[shieldvar.get()]["atk"]
atkvar.set(a + b)
c = weapondict[weaponvar.get()]["def"]
d = shielddict[shieldvar.get()]["def"]
defvar.set(c + d)
#WINDOWLOOP#
root = tk.Tk()
root.geometry("250x125")
#VARIABLES#
weaponvar = tk.StringVar()
shieldvar = tk.StringVar()
atkvar = tk.IntVar()
defvar = tk.IntVar()
#COMBOBOXES#
weaponbox = ttk.Combobox(root, height=5, state="readonly", values=list(weapondict.keys()), textvariable=weaponvar)
weaponbox.place(x=10, y=10, width=130)
weaponbox.bind('<<ComboboxSelected>>', func=selected)
shieldbox = ttk.Combobox(root, height=5, state="readonly", values=list(shielddict.keys()), textvariable=shieldvar)
shieldbox.place(x=10, y=70, width=130)
shieldbox.bind('<<ComboboxSelected>>', func=selected)
#LABELS#
atklabel = tk.Label(root, text='Atk Bonus:')
atklabel.place(x=150, y=10, width=70, height=20)
deflabel = tk.Label(root, text='Def Bonus:')
deflabel.place(x=150, y=70, width=70, height=20)
atktotal = tk.Label(root, textvariable=atkvar)
atktotal.place(x=155, y=30, width=100, height=20)
deftotal = tk.Label(root, textvariable=defvar)
deftotal.place(x=155, y=90, width=100, height=20)
root.mainloop()
Цель состоит в том, чтобы просто взять выбор из каждого комбинированного списка и принять его заданное значение, добавить это целое число к другому, чтобы получить общее значение, одновременно решаяпроблема ключевой ошибки и делает код более читабельным и простым для редактирования. Я хочу поставить несколько ящиков, каждый с несколькими предметами, и при таком подходе будет очень запутанно, заранее спасибо!