Ero titubante sul creare o meno questa discussione. Mi rendo conto che qualcosa mi sfugge sull'argomento classi perché provando a costruire qualcosa di mio..qualcosa non torna. Semplice XD
Vi chiedo quindi se potete gentilmente aiutarmi a far luce sulle classi in tkinter adoperando python 3. Magari conoscete fonti diverse da quelle che ho consultato (e che includono quelle indicate in questo forum).
Per contestualizzare il problema, vi mostro il codice che ho costruito (nella modalità 'meno peggio' e qui ho AttributeError: 'App' object has no attribute 'frame2b'). Si tratta della versione con classi di un altro codice scritto inizialmente come semplice procedura e che mi funzione correttamente.
Se non riuscite a sbrogliarmi la situazione, mi andrebbe bene anche solo chiarirmi meglio l'argomento classi.
Vi chiedo quindi se potete gentilmente aiutarmi a far luce sulle classi in tkinter adoperando python 3. Magari conoscete fonti diverse da quelle che ho consultato (e che includono quelle indicate in questo forum).
Per contestualizzare il problema, vi mostro il codice che ho costruito (nella modalità 'meno peggio' e qui ho AttributeError: 'App' object has no attribute 'frame2b'). Si tratta della versione con classi di un altro codice scritto inizialmente come semplice procedura e che mi funzione correttamente.
Se non riuscite a sbrogliarmi la situazione, mi andrebbe bene anche solo chiarirmi meglio l'argomento classi.
Python:
import tkinter as tk
class App:
def __init__(self, master):
# frame 1
frame1=tk.Frame(master, bg='light cyan2')
frame1.grid(row=0, column=0, sticky="we")
self.bottone=tk.Button(frame1, command=self.FinestraScorrevole)
self.bottone.grid(row=0, column=0)
self.iconaRigata= tk.PhotoImage(file="pupazzo-neve-animato_gif.gif", width=100, height=100)
self.bottone.configure(image=self.iconaRigata, width=100, height=100)
self.label=tk.Label(frame1, text='sono un adesivo', bg='VioletRed2')
self.label.grid(row=0, column=1)
# framePub
framePub=tk.Frame(master, height=300, width=400, bg='thistle1')
framePub.grid(row=1, column=0, padx=10,pady=10)
# frame 2
frame2=tk.Frame(master, bg='aquamarine')
frame2.grid(row=2, column=0, sticky="we", padx=1,pady=10)
# frame 2b
canvas = tk.Canvas(master, borderwidth=0, bg='khaki1')
frame2b = tk.Frame(canvas, bg='khaki1')
vsb = tk.Scrollbar(master, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.grid(row=3, column=1, sticky='ns')
canvas.grid(row=3, column=0, sticky='nsew')
canvas.create_window((4,4), window=self.frame2b, anchor="nw")
self.frame2b.bind("<Configure>", lambda event, canvas=canvas: root.tk.onFrameConfigure(canvas))
self.label=tk.Label(frame2b, text='sono un adesivo', bg='DarkOrange1')
self.label.grid(row=3, column=1)
self.label=tk.Label(frame2b, text='sono un adesivo', bg='DarkOrange1')
label.grid(row=4, column=1, padx=10,pady=10)
self.label=tk.Label(frame2b, text='sono un adesivo', bg='DarkOrange1')
self.label.grid(row=5, column=1, padx=10,pady=10)
populate(frame2b)
# frame 3
frame3=tk.Frame(master, bg='lavender')
frame3.grid(row=4, column=0, sticky="we", padx=1,pady=1)
self.bottone=tk.Button(frame3, text='salutami', bg='light cyan2', activeforeground='plum1', command=self.saluto)
bottone.grid(row=0, column=0)
self.bottone=tk.Button(frame3, text='fiaba', bg='light cyan2', activeforeground='azure', command=self.fiaba)
bottone.grid(row=0, column=1)
###################
# def frame 1
def FinestraScorrevole(self):
print('prova')
# def frame 2b
def populate(self, frame2b):
self.label=tk.Label(frame2b, text='sono un adesivo1', bg='DarkOrange1', height=100, width=30)
self.label.grid(row=3, column=1)
self.label=tk.Label(frame2b, text='sono un adesivo2', bg='DarkOrange1')
self.label.grid(row=4, column=1, padx=10,pady=10)
self.label=tk.Label(frame2b, text='sono un adesivo3', bg='DarkOrange1')
vlabel.grid(row=5, column=1, padx=10,pady=10)
def onFrameConfigure(self, canvas):
'''Reset the scroll region to encompass the inner frame'''
canvas.configure(scrollregion=canvas.bbox("all"))
# def frame 3
def saluto(self):
print('ciao ciao')
def fiaba(self):
print('Biancaneve!!')
###############
# ROOT
root=tk.Tk()
root.title('comando saluto')
root.configure(bg='white')
#root.geometry('1200x800')
app = App(root)
root.mainloop()