ventanas tutorial toplevel interfaz instalar grafica examples botones python user-interface listbox tkinter interactive

tutorial - ¿Cómo puedo hacer una lista interactiva en Tkinter de Python completa con botones que pueden editar esos listados?



tkinter tutorial (1)

Básicamente, quiero que haya una lista, que muestre los archivos que he almacenado en una determinada carpeta, y junto a la lista hay botones que abren ventanas separadas que pueden editar o agregar un nuevo elemento a esa lista.

Quiero que addchar abra una nueva ventana con espacios para diferentes campos, luego cuando presiona el botón "crear" en esa ventana se cierra, crea un archivo en la información que acaba de ingresar (es por eso que he importado el sistema operativo) también como la creación de un nuevo elemento en el cuadro de lista de la interfaz principal como el nombre del personaje (que es uno de los campos). La función removechar eliminaría esa entrada y eliminaría el archivo, y editchar abriría una ventana similar a addchar, pero con la información del elemento seleccionado en la lista.

EDITAR: Aquí está el código hasta el momento

from tkinter import * import os import easygui as eg class App: def __init__(self, master): frame = Frame(master) frame.pack() # character box Label(frame, text = "Characters Editor").grid(row = 0, column = 0, rowspan = 1, columnspan = 2) charbox = Listbox(frame) for chars in []: charbox.insert(END, chars) charbox.grid(row = 1, column = 0, rowspan = 5) charadd = Button(frame, text = " Add ", command = self.addchar).grid(row = 1, column = 1) charremove = Button(frame, text = "Remove", command = self.removechar).grid(row = 2, column = 1) charedit = Button(frame, text = " Edit ", command = self.editchar).grid(row = 3, column = 1) def addchar(self): print("not implemented yet") def removechar(self): print("not implemented yet") def editchar(self): print("not implemented yet") root = Tk() root.wm_title("IA Development Kit") app = App(root) root.mainloop()


Ok, implementé addchar y removechar por ti (y pellizqué algunas otras cosas en tu código). editchar la implementación de editchar para usted, eche un vistazo a lo que escribí para ayudarlo, así como a la documentación de la lista

from Tkinter import * # AFAIK Tkinter is always capitalized #import os #import easygui as eg class App: characterPrefix = "character_" def __init__(self, master): self.master = master # You''ll want to keep a reference to your root window frame = Frame(master) frame.pack() # character box Label(frame, text = "Characters Editor").grid(row = 0, column = 0, rowspan = 1, columnspan = 2) self.charbox = Listbox(frame) # You''ll want to keep this reference as an attribute of the class too. for chars in []: self.charbox.insert(END, chars) self.charbox.grid(row = 1, column = 0, rowspan = 5) charadd = Button(frame, text = " Add ", command = self.addchar).grid(row = 1, column = 1) charremove = Button(frame, text = "Remove", command = self.removechar).grid(row = 2, column = 1) charedit = Button(frame, text = " Edit ", command = self.editchar).grid(row = 3, column = 1) def addchar(self, initialCharacter='''', initialInfo=''''): t = Toplevel(root) # Creates a new window t.title("Add character") characterLabel = Label(t, text="Character name:") characterEntry = Entry(t) characterEntry.insert(0, initialCharacter) infoLabel = Label(t, text="Info:") infoEntry = Entry(t) infoEntry.insert(0, initialInfo) def create(): characterName = characterEntry.get() self.charbox.insert(END, characterName) with open(app.characterPrefix + characterName, ''w'') as f: f.write(infoEntry.get()) t.destroy() createButton = Button(t, text="Create", command=create) cancelButton = Button(t, text="Cancel", command=t.destroy) characterLabel.grid(row=0, column=0) infoLabel.grid(row=0, column=1) characterEntry.grid(row=1, column=0) infoEntry.grid(row=1, column=1) createButton.grid(row=2, column=0) cancelButton.grid(row=2, column=1) def removechar(self): for index in self.charbox.curselection(): item = self.charbox.get(int(index)) self.charbox.delete(int(index)) try: os.remove(characterPrefix + item) except IOError: print "Could not delete file", characterPrefix + item def editchar(self): # You can implement this one ;) root = Tk() root.wm_title("IA Development Kit") app = App(root) root.mainloop()