Я новичок в кодировании.Вероятно, 3 недели кодирования максимум.Мне нужна помощь, чтобы правильно настроить кнопку загрузки.В моей программе у меня есть поле ввода и кнопка, которая автоматически генерирует поля ввода, с помощью которых вы затем вводите значения для словаря.Я хочу, чтобы моя кнопка загрузки создала нужное количество полей ввода и заполнила для вас текст в полях ввода.На данный момент все, что он делает, это заполняет словарь в ярлыке, который отчасти бесполезен.
Вот мой код.
from tkinter import *
import tkinter
from math import *
from tkinter.filedialog import askopenfilename
import json
import os
class App:
def __init__(self,root):
self.root = root
self.entry = Entry(self.root)
self.button = Button(self.root, text="Input number of items in bag", command=self.command)
self.done = Button(self.root, text="Save File", command=self.save)
self.load = Button(self.root, text="Load File", command=self.load_data)
self.save = Button(self.root, text="Save List", command=self.dict)
self.frame = Frame(self.root)
self.browsebutton = Button(root, text="Browse", command=self.browsefunc)
self.entry.pack(side=RIGHT)
self.button.pack(side=RIGHT)
self.save.pack(side=LEFT)
self.done.pack(side=BOTTOM)
self.load.pack(side=BOTTOM)
self.browsebutton.pack(side=BOTTOM)
self.frame.pack()
global pathlabel
pathlabel= Label(self.root)
pathlabel.pack(side=BOTTOM)
Label(self.root, text="Enter calculation below:").pack()
global entry
entry = Entry(self.root)
entry.bind("<Return>", self.evaluate)
entry.pack()
global res
res = Label(self.root)
res.pack()
global lbl
lbl = Label(self.root)
lbl.pack(side=BOTTOM)
global DND_label
Label(self.root)
DND_label = Label(self.root)
DND_label.pack(side=TOP)
def command(self):
self.frame.destroy()
self.frame = Frame(self.root)
self.text = []
for i in range(int(self.entry.get())):
self.text.append(Entry(self.frame, text="Item " + str(i+1) + ': '))
self.text[i].pack()
self.frame.pack()
lbl.config(text="Enter amount and item name.")
def dict(self):
global DND
DND = {}
for i in range(len(self.text)):
DND.update({self.text[i].cget("text"): self.text[i].get()})
for k, v in DND.items():
print(v)
DND_label.configure(text = "Inventory: " + str(DND.values()))
def save(self):
DND = {}
for i in range(len(self.text)):
DND.update({self.text[i].cget("text"): self.text[i].get()})
try:
with open(filename, 'w') as f:
newpath = os.path.splitext(filename)[0] + "_NEW.txt"
with open(newpath, 'w') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
except FileNotFoundError:
try:
New_dir = os.mkdir(os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories'))
filepath = os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories')
file = 'DND_inventory.txt'
newpath = os.path.join(filepath, file)
with open(newpath, 'w') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
except FileExistsError:
try:
filepath = os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories')
file = 'DND_inventory.txt'
newpath = os.path.join(filepath, file)
with open(newpath, 'x') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
except FileExistsError:
filepath = os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories')
file = 'DND_inventory.txt'
file = os.path.join(filepath, file)
with open(file, 'r') as f:
newpath = os.path.join(filepath, file[0:-4]) + "_NEW.txt"
with open(newpath, 'w') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
except NameError:
try:
New_dir = os.mkdir(os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories'))
filepath = os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories')
file = 'DND_inventory.txt'
newpath = os.path.join(filepath, file)
with open(newpath, 'w') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
except FileExistsError:
try:
filepath = os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories')
file = 'DND_inventory.txt'
newpath = os.path.join(filepath, file)
with open(newpath, 'x') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
except FileExistsError:
filepath = os.path.join(os.path.expanduser('~'), 'Documents', 'DND_player_inventories')
file = 'DND_inventory.txt'
file = os.path.join(filepath, file)
with open(file, 'r') as f:
newpath = os.path.join(filepath, file[0:-4]) + "_NEW.txt"
with open(newpath, 'w') as j:
json.dump(DND,j)
DND_label.configure(text = "Inventory: " + str(DND.values()))
for k, v in DND.items():
print(v)
def load_data(self):
with open(filename, 'r') as f:
try:
DND = json.load(f)
except ValueError:
DND = {}
for k, v in DND.items():
DND_label.configure(text = "Inventory: " + str(DND.values()))
print(v)
@staticmethod
def browsefunc():
global filename
filename = askopenfilename()
pathlabel.config(text=filename)
@staticmethod
def evaluate(self):
res.configure(text = "Answer: " + str(eval(entry.get())))
if __name__ == "__main__":
global root
root = Tk()
root.title('DND Player inventories')
App(root)
root.mainloop()
Это то, что у меня есть для кнопки загрузки.
def load_data(self):
with open(filename, 'r') as f:
try:
DND = json.load(f)
except ValueError:
DND = {}
for k, v in DND.items():
DND_label.configure(text = "Inventory: " + str(DND.values()))
print(v)
Другая вещь, с которой мне нужна помощь, - это отображение словаря.значения без лишних формулировок там.Я использую приведенный ниже код, который показывает, что находится в словаре, просто не очень хорошо выглядит.
DND_label.configure(text = "Inventory: " + str(DND.values()))
Пример словаря, сохраните его в текстовом файле и перейдите к нему для загрузки.Имя текстового файла не имеет значения.
{"Item 1: ": "test", "Item 2: ": "test 1", "Item 3: ": "test 3", "Item 4: ": "test 4"}
Я использую tkinter для графического интерфейса.Это просто проект, который поможет мне учиться.Глубоко ответы на вопросы, как и почему будет очень ценится.Я уверен, что есть более простые способы, чтобы закодировать это, но это понятно для меня, поскольку я изучаю.