Topic: Listbox variabile 2 variabile 3 problem.  (Letto 99 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline johnwick

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Listbox variabile 2 variabile 3 problem.
« il: Maggio 17, 2020, 13:08 »
Buonasera. Ho un problema con queste 2 liste. Numeri e squadre non allineati. Come devo fare per fare uscire il numero alla sinistra delle squadre?

import tkinter as tk
 
window = tk.Tk()
window.title('Campionato di calcio serie A - 2019/20')
 
window.geometry('1100x600')
 
var1 = tk.StringVar()
l = tk.Label(window, bg='green', fg='yellow',font=('Arial', 12), width=10, textvariable=var1)
l.pack()
 
def print_selection():
    value = lb.get(lb.curselection())   
    var1.set(value) 
 
b1 = tk.Button(window, text='Seleziona Squad.', width=15, height=2, command=print_selection)
b1.pack()
 
var2 = tk.StringVar()
var2.set(())
lb = tk.Listbox(window, listvariable=var2, width=30, height=30)

var3 = tk.StringVar()
var3.set(())
lb = tk.Listbox(window, listvariable=var3, width=30, height=30)

numeri = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
          "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]

squadre = ["Atalanta", "Bologna", "Brescia", "Cagliari", "Fiorentina", "Genoa", "Inter",
          "Juventus", "Lazio", "Lecce", "Milan", "Napoli", "Parma", "Roma",
          "Sampdoria", "Sassuolo", "Spal", "Torino", "Udinese", "Verona"]
for item in numeri + squadre:
    lb.insert('end', item)

lb.pack()
 
window.mainloop()
« Ultima modifica: Maggio 17, 2020, 21:23 da johnwick »

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:Listbox variabile 2 variabile 3 problem.
« Risposta #1 il: Maggio 17, 2020, 22:29 »
Personalmente, per prima cosa "disegnerei" su carta la finestra che vorrei ottenere e dopo aver letto, attentamente, il funzionamento del geometry manager pack e quindi del geometry manager grid deciderei quale sarebbe più opportuno applicare per il mio progetto.

Di per se, a mio parere, il "grid" ha dalla sua una maggiore possibilità di controllo del posizionamento al primo impatto, controllo che si raggiunge anche con "pack" imparando a suddividere la superficie in aree omogenee tramite frame utilizzati quali pannelli elementari.

Per altro, eviterei di mischiare di due geometry manager.

Offline johnwick

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:Listbox variabile 2 variabile 3 problem.
« Risposta #2 il: Maggio 18, 2020, 19:56 »
Grazie nuzzopippo, ho seguito le 2 guide segnalate. Sono riuscito a creare questa tabella che posto sotto. Adesso nella colonna Squadre devo inserire le squadre. Non ho idea come proseguire. Qualche consiglio è bene accettato. Grazie.

http://www.filedropper.com/tabellapy
« Ultima modifica: Maggio 18, 2020, 19:59 da johnwick »

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:Listbox variabile 2 variabile 3 problem.
« Risposta #3 il: Maggio 19, 2020, 09:14 »
Visto la tabella, carina ... spero Tu NON l'abbia realizzata utilizzando tecniche imperative o funzionali, avrai grossi problemi in tal caso.

Citazione
Adesso nella colonna Squadre devo inserire le squadre. Non ho idea come proseguire. Qualche consiglio è bene accettato. Grazie.

Tabellina fatta, ed ora?...  :question:

... vedi, la realizzazione di un programma è analoga alla costruzione di un edificio, richiede, necessariamente tutta una serie di passi ben precisi, quelli preliminari sono la conoscenza dello scopo dell'edificio, cosa è destinato a fare in sostanza, e la "consistenza" della costruzione da realizzare, una abitazione monofamiliare è ben diversa da una palazzina condominiale. Ovviamente conditi dalla conoscenza del territorio e delle caratteristiche geologiche e normative esistenti nel lotto da destinarsi.

In base a tali caratteristiche un professionista provvede a redigere un "progetto" idoneo alla realizzazione dell'opera richiesta rispettando tutti i limiti, fisici e normativi, inferenti con l'opera, analizzando e predisponendo le caratteristiche strutturali in modo da ottenere il miglior rapporto costi/benefici e la massima robustezza statica dell'edificio ... Ovviamente, il tecnico progettista sarà molto edotto delle tecniche di lavorazione richieste, così come ne sarà edotto chi realizzerà effettivamente l'opera.

La fase successiva, cantierazione, è la predisposizione ed acquisizione dei mezzi d'opera e dei materiali necessari alla successiva fase di realizzazione che verrà effettuata partendo dalle fondamenta, quindi passando, in successione, agli elementi strutturali, agli impianti tecnologici, opere di finitura, infissi ed opere di completamento, il tutto eseguito con le migliori tecniche costruttive al fine di ottenere la massima ergonomia ed efficienza possibili. Ovviamente ogni significativo elemento o fase subirà un collaudo atto a verificare la rispondenza allo scopo da ottenersi.

... Ora, la Tua tabella è, più o meno, equivalente ad un impianto tecnologico secondario, tipo l'impianto elettrico di una singola stanza, che non ha neanche subito un collaudo (quale è il codice?) e che non è nemmeno corredata da una situazione progettuale, da quale quadro elettrico ottiene l'energia (i dati)?, cosa produce l'energia (fonte dati)?, come viene consumata (manipolazione dati)?, l'energia non consumata che fine fa (destinazione nuovi dati)?

Difficile dare un "consiglio" su di una situazione a se stante e, di per se, molto campata in aria. Comprendo la Tua voglia di fare, però tale voglia necessita di un "saper fare" e di un obiettivo da conseguire, lo "obiettivo" stabilisce il "cosa fare" e quest'ultimo definisce cosa apprendere/utilizzare per conseguire la meta.

Quanto sopra, per dare una idea su come si affronta un "argomento", per Tua stessa affermazione sei carente sul "saper fare", che sarebbe prioritario ... vuoi un consiglio? Ok! Tempo permettendo cercherò di darti un parere, nei miei limiti.
Parliamo un po' di cosa vuoi realizzare e del come vorresti farlo, poi posta il codice realizzato, ti dirò che ne penso e, magari, qualche idea esce fuori su come proseguire.

Offline johnwick

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:Listbox variabile 2 variabile 3 problem.
« Risposta #4 il: Maggio 19, 2020, 10:58 »
Grazie per il tuo interessamento. Posto il link di quello che voglio realizzare, Vedi alla meta pagina:

https://it.wikipedia.org/wiki/Serie_A_2019-2020

Questo è il mio codice sorgente, versione 0.0.1 (versione, revisione, relese) . Il codice è molto elementare, l'ho tagliato perché è troppo lungo....

import tkinter as tk

master = tk.Tk()
master.title('Campionato di calcio serie A - 2019/20')
 
master.geometry('1200x640')
master.configure(background="#98AFC7")

spazioy = tk.Label(master, text="", width=3).grid(row=0, column=0)
spaziox = tk.Label(master, text="", width=3).grid(row=0, column=1)

squadre = tk.Label(master, text="Squadre", width=22, bg="#FDD017").grid(row=0, column=2)
punti = tk.Label(master, text="PT", width=5, bg="#FDD017").grid(row=0, column=3)
giornate = tk.Label(master, text="GI", width=5, bg="#FDD017").grid(row=0, column=4)
par_vinte = tk.Label(master, text="VI", width=5, bg="#FDD017").grid(row=0, column=5)
par_pareggi = tk.Label(master, text="PA", width=5, bg="#FDD017").grid(row=0, column=6)
par_perse = tk.Label(master, text="PE", width=5, bg="#FDD017").grid(row=0, column=7)
gol_fatti = tk.Label(master, text="GOL F", width=5, bg="#FDD017").grid(row=0, column=8)
gol_subiti = tk.Label(master, text="GOL S", width=5, bg="#FDD017").grid(row=0, column=9)
differ_reti = tk.Label(master, text="D RET", width=5, bg="#FDD017").grid(row=0, column=10)

label = tk.Label(master, text="1", width=3, bg="#82CAFA").grid(row=1, column=1)
label = tk.Label(master, text="2", width=3, bg="#E0FFFF").grid(row=2, column=1)
label = tk.Label(master, text="3", width=3, bg="#E0FFFF").grid(row=3, column=1)
label = tk.Label(master, text="4", width=3, bg="#E0FFFF").grid(row=4, column=1)
label = tk.Label(master, text="5", width=3, bg="#57E964").grid(row=5, column=1)
label = tk.Label(master, text="6", width=3, bg="#C3FDB8").grid(row=6, column=1)
label = tk.Label(master, text="7", width=3, bg="#FDD017").grid(row=7, column=1)
label = tk.Label(master, text="8", width=3, bg="#FDD017").grid(row=8, column=1)
label = tk.Label(master, text="9", width=3, bg="#FDD017").grid(row=9, column=1)
label = tk.Label(master, text="10", width=3, bg="#FDD017").grid(row=10, column=1)
label = tk.Label(master, text="11", width=3, bg="#FDD017").grid(row=11, column=1)
label = tk.Label(master, text="12", width=3, bg="#FDD017").grid(row=12, column=1)
label = tk.Label(master, text="13", width=3, bg="#FDD017").grid(row=13, column=1)
label = tk.Label(master, text="14", width=3, bg="#FDD017").grid(row=14, column=1)
label = tk.Label(master, text="15", width=3, bg="#FDD017").grid(row=15, column=1)
label = tk.Label(master, text="16", width=3, bg="#FDD017").grid(row=16, column=1)
label = tk.Label(master, text="17", width=3, bg="#FDD017").grid(row=17, column=1)
label = tk.Label(master, text="18", width=3, bg="#F9B7FF").grid(row=18, column=1)
label = tk.Label(master, text="19", width=3, bg="#F9B7FF").grid(row=19, column=1)
label = tk.Label(master, text="20", width=3, bg="#F9B7FF").grid(row=20, column=1)

# Creazione box dove inserire squadre
e1 = tk.Entry(master, width=25, bg="#82CAFA")
e2 = tk.Entry(master, width=25, bg="#E0FFFF")
e3 = tk.Entry(master, width=25, bg="#E0FFFF")
e4 = tk.Entry(master, width=25, bg="#E0FFFF")
e5 = tk.Entry(master, width=25, bg="#57E964")
e6 = tk.Entry(master, width=25, bg="#C3FDB8")
e7 = tk.Entry(master, width=25)
e8 = tk.Entry(master, width=25)
e9 = tk.Entry(master, width=25)
e10 = tk.Entry(master, width=25)
e11 = tk.Entry(master, width=25)
e12 = tk.Entry(master, width=25)
e13 = tk.Entry(master, width=25)
e14 = tk.Entry(master, width=25)
e15 = tk.Entry(master, width=25)
e16 = tk.Entry(master, width=25)
e17 = tk.Entry(master, width=25)
e18 = tk.Entry(master, width=25, bg="#F9B7FF")
e19 = tk.Entry(master, width=25, bg="#F9B7FF")
e20 = tk.Entry(master, width=25, bg="#F9B7FF")

# Posizione box, pady=5 spazio tra box
e1.grid(row=1, column=2, pady=5)
e2.grid(row=2, column=2, pady=5)
e3.grid(row=3, column=2, pady=5)
e4.grid(row=4, column=2, pady=5)
e5.grid(row=5, column=2, pady=5)
e6.grid(row=6, column=2, pady=5)
e7.grid(row=7, column=2, pady=5)
e8.grid(row=8, column=2, pady=5)
e9.grid(row=9, column=2, pady=5)
e10.grid(row=10, column=2, pady=5)
e11.grid(row=11, column=2, pady=5)
e12.grid(row=12, column=2, pady=5)
e13.grid(row=13, column=2, pady=5)
e14.grid(row=14, column=2, pady=5)
e15.grid(row=15, column=2, pady=5)
e16.grid(row=16, column=2, pady=5)
e17.grid(row=17, column=2, pady=5)
e18.grid(row=18, column=2, pady=5)
e19.grid(row=19, column=2, pady=5)
e20.grid(row=20, column=2, pady=5)

# Creazione secondo box dove inserire Punti
b1 = tk.Entry(master, width=6, bg="#82CAFA")
b2 = tk.Entry(master, width=6, bg="#E0FFFF")
b3 = tk.Entry(master, width=6, bg="#E0FFFF")
b4 = tk.Entry(master, width=6, bg="#E0FFFF")
b5 = tk.Entry(master, width=6, bg="#57E964")
b6 = tk.Entry(master, width=6, bg="#C3FDB8")
b7 = tk.Entry(master, width=6)
b8 = tk.Entry(master, width=6)
b9 = tk.Entry(master, width=6)
b10 = tk.Entry(master, width=6)
b11 = tk.Entry(master, width=6)
b12 = tk.Entry(master, width=6)
b13 = tk.Entry(master, width=6)
b14 = tk.Entry(master, width=6)
b15 = tk.Entry(master, width=6)
b16 = tk.Entry(master, width=6)
b17 = tk.Entry(master, width=6)
b18 = tk.Entry(master, width=6, bg="#F9B7FF")
b19 = tk.Entry(master, width=6, bg="#F9B7FF")
b20 = tk.Entry(master, width=6, bg="#F9B7FF")

# Posizione secondo box Punti, pady=5 spazio tra box
b1.grid(row=1, column=3, pady=5)
b2.grid(row=2, column=3, pady=5)
b3.grid(row=3, column=3, pady=5)
b4.grid(row=4, column=3, pady=5)
b5.grid(row=5, column=3, pady=5)
b6.grid(row=6, column=3, pady=5)
b7.grid(row=7, column=3, pady=5)
b8.grid(row=8, column=3, pady=5)
b9.grid(row=9, column=3, pady=5)
b10.grid(row=10, column=3, pady=5)
b11.grid(row=11, column=3, pady=5)
b12.grid(row=12, column=3, pady=5)
b13.grid(row=13, column=3, pady=5)
b14.grid(row=14, column=3, pady=5)
b15.grid(row=15, column=3, pady=5)
b16.grid(row=16, column=3, pady=5)
b17.grid(row=17, column=3, pady=5)
b18.grid(row=18, column=3, pady=5)
b19.grid(row=19, column=3, pady=5)
b20.grid(row=20, column=3, pady=5)

# Creazione terzo box dove inserire Giornate
c1 = tk.Entry(master, width=6, bg="#82CAFA")
c2 = tk.Entry(master, width=6, bg="#E0FFFF")
c3 = tk.Entry(master, width=6, bg="#E0FFFF")
c4 = tk.Entry(master, width=6, bg="#E0FFFF")
c5 = tk.Entry(master, width=6, bg="#57E964")
c6 = tk.Entry(master, width=6, bg="#C3FDB8")
c7 = tk.Entry(master, width=6)
c8 = tk.Entry(master, width=6)
c9 = tk.Entry(master, width=6)
c10 = tk.Entry(master, width=6)
c11 = tk.Entry(master, width=6)
c12 = tk.Entry(master, width=6)
c13 = tk.Entry(master, width=6)
c14 = tk.Entry(master, width=6)
c15 = tk.Entry(master, width=6)
c16 = tk.Entry(master, width=6)
c17 = tk.Entry(master, width=6)
c18 = tk.Entry(master, width=6, bg="#F9B7FF")
c19 = tk.Entry(master, width=6, bg="#F9B7FF")
c20 = tk.Entry(master, width=6, bg="#F9B7FF")

# Posizione terzo box Giornate, pady=5 spazio tra box
c1.grid(row=1, column=4, pady=5)
c2.grid(row=2, column=4, pady=5)
c3.grid(row=3, column=4, pady=5)
c4.grid(row=4, column=4, pady=5)
c5.grid(row=5, column=4, pady=5)
c6.grid(row=6, column=4, pady=5)
c7.grid(row=7, column=4, pady=5)
c8.grid(row=8, column=4, pady=5)
c9.grid(row=9, column=4, pady=5)
c10.grid(row=10, column=4, pady=5)
c11.grid(row=11, column=4, pady=5)
c12.grid(row=12, column=4, pady=5)
c13.grid(row=13, column=4, pady=5)
c14.grid(row=14, column=4, pady=5)
c15.grid(row=15, column=4, pady=5)
c16.grid(row=16, column=4, pady=5)
c17.grid(row=17, column=4, pady=5)
c18.grid(row=18, column=4, pady=5)
c19.grid(row=19, column=4, pady=5)
c20.grid(row=20, column=4, pady=5)

def createNewWindow():
    newWindow = tk.Toplevel(master)
    labelris = tk.Label(newWindow, text = "Risultati", font='helvetica 12')
    buttonris = tk.Button(newWindow, text = "Clicca qui")
    buttonris.configure(font='helvetica 12')
   
    labelris.pack()
    buttonris.pack()


buttonris = tk.Button(master,
              text="Risultati",
              command=createNewWindow)

buttonris.grid(row=21, column=13)
buttonris.configure(font='helvetica 12')

btn1 = tk.Button(master, text="Salva", padx=10)
btn1.grid(row=21, column=11)
btn1.configure(font='helvetica 12')

btn2 = tk.Button(master, text="Apri", padx=10)
btn2.grid(row=21, column=12)
btn2.configure(font='helvetica 12')

master.mainloop()



Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:Listbox variabile 2 variabile 3 problem.
« Risposta #5 il: Maggio 19, 2020, 12:22 »
Grazie per il tuo interessamento. Posto il link di quello che voglio realizzare, Vedi alla meta pagina:

https://it.wikipedia.org/wiki/Serie_A_2019-2020

Questo è il mio codice sorgente, versione 0.0.1 (versione, revisione, relese) . Il codice è molto elementare, l'ho tagliato perché è troppo lungo....

Vuoi solo riprodurre la tabellina delle classifiche, magari con le bandierine ed "ordinamenti" ma senza modifiche dati?

Riguardo il Tuo codice ... in un altro post Ti ho già suggerito di guardarti la programmazione ad oggetti in python prima di interagire con le GUI, Ti confermo il parere, la programmazione imperativa che utilizzi è semplicemente "terribile", assolutamente non idonea a tali implementazioni. Così com'è ...

Fermo restando che non è che io sia un gran che, potrei farti un esempio in merito al Tuo scopo nel fine settimana ma ti servirà a ben poco se prima non acquisisci una certa familiarità di base con la programmazione ad oggetti e sospetto ci sia ben altro da acquisire prima

... non è un discorso facile consigliarti in merito, non è che conosca molto in python, il mio background è principalmente in altri linguaggi ... un pdf che ho trovato interessante (ma non so che ne pensino gli avanzati) è stato "Dive into python 3", trovato su questa pagina di debianizzati.org, è in italiano e tratta classi ed iteratori in unica soluzione, è una lettura "ponderosa" e da seguire passo-passo, non è che si possa saltare da un punto ad un altro e comunque non esaurisce l'argomento, c'è proprio tanto da imparare (anche per me).

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:Listbox variabile 2 variabile 3 problem.
« Risposta #6 il: Maggio 22, 2020, 19:22 »
Allora, @Johnwick, questo pomeriggio ho dedicato un paio d'ore per fare un mix tra la tabella da Te scritta e quella di esempio nel Tuo link, tale esempio è la sola "grafica", giusto per farTi vedere una maniera un po' più compatta per fare all'incirca quello che hai fatto Tu utilizzando le classi.
Lo scrivo separatamente ora perché penso che l'intero codice necessario per un esempio completo sarebbe eccessivo per un singolo post.

nel codice sono preparati dei punti per rispondere, in successivo post, a
Citazione
Adesso nella colonna Squadre devo inserire le squadre. Non ho idea come proseguire.
utilizzando la tabella, metodo che non trovo "magnifico", ma che comunque può andare per esempio spicciolo, tale predisposizione sono i metodi:

# in Data_Contenitor
    def set_data(self, data): pass
    def get_data(self): pass
# in Tabella_campionato ke funzioni di callback
    def _on_save(self): pass
    def _on_open(self): pass

Domani cercherò di implementarle e postarle

intanto il codice attuale dell'esempio

import tkinter as tk

class Data_Contenitor(tk.Frame):
    ''' Pannello dati. '''
    headers = ';Pos;Squadre;Pt;Gi;Vi;Pa;Pe;Gol F;Gol S;D Reti'.split(';')
    colors = ['#eaecf0', '#99cbff', '#afeeee', '#b0ffb0', '#ccffcc', '#ffcccc']
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.sfondo = tk.Frame()
        self.sfondo.configure(border=None, bg='#afeeee')
        self._make_header()
        self.data_rows = []
        for i in range(1, 22):
            self._make_row(i)
        for i in range(12):
            self.grid_columnconfigure(i, minsize=50)
        self.grid_columnconfigure(3, weight=1)
        self.update()
       
   
    def _make_header(self):
        for i in range(len(self.headers)):
            lbl = tk.Label(self, relief='raised', text=self.headers[i],
                           font='Serif 10 bold', bg=self.colors[0], justify='center')
            if i < 2:
                lbl.grid(row=0, column=i, sticky='nsew')
            elif i == 2:
                lbl.grid(row=0, column=i, columnspan=2, sticky='nsew')
            else:
                lbl.grid(row=0, column=i+1, sticky='nsew')
   
    def _make_row(self, i):
        #for i in range(1, 22):
        row = []
        if i == 1:
            color = self.colors[1]
        elif i >= 2 and i <= 4:
            color = self.colors[2]
        elif i == 5:
            color = self.colors[3]
        elif i == 6:
            color = self.colors[4]
        elif i >= 18:
            color = self.colors[5]
        else:
            color = 'white'
        for j in range(12):
            if j < 3:
                ctrl = tk.Label(self, relief='sunken', bg=color, justify='center')
                if j == 1 : ctrl.configure(text='{}.'.format(i))
            elif j == 3:
                ctrl = tk.Entry(self, width=20, bg=color)
            else:
                ctrl = tk.Entry(self, width=5, bg=color)
            ctrl.grid(row=i, column=j, sticky='ew')
            row.append(ctrl)
        self.data_rows.append(row)

    def set_data(self, data): pass
    def get_data(self): pass

class Tabella_campionato(tk.Tk):
    ''' Riproduzione tabelle campionato di esempio. '''
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title('Campionati ')
        self.canvas = tk.Canvas()
        self.canvas.grid(row=0, column=0, sticky='nsew')
        self.d_c = Data_Contenitor(self.canvas, border=4)
        self.d_c.grid(row=0, column=0)
        sy = tk.Scrollbar(self, orient=tk.VERTICAL)
        sy.grid(row=0, column=1, sticky='ns')
        sy.configure(command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=sy.set)
        sx = tk.Scrollbar(self, orient=tk.HORIZONTAL)
        sx.grid(row=1, column=0, sticky='ew')
        sx.configure(command=self.canvas.xview)
        self.canvas.configure(xscrollcommand=sx.set)
        self.canvas.create_window((4,4), window=self.d_c, anchor='nw')
        self._add_buttons()
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.d_c.bind('<Configure>', self._on_d_c_configure)
        self.configure(width=self.d_c.winfo_width())

    def _on_d_c_configure(self, evt):
        self.canvas.configure(scrollregion=self.canvas.bbox('all'))
   
    def _add_buttons(self):
        panel = tk.Frame(self)
        panel.grid(row=2, column=0, columnspan=2, sticky='ew')
        bt1 = tk.Button(panel, text='Salva', command=self._on_save)
        bt1.grid(row=0, column=0, sticky='ew')
        bt2 = tk.Button(panel, text='Apri', command=self._on_open)
        bt2.grid(row=0, column=1, sticky='ew')
        bt3 = tk.Button(panel, text='Risultati', command=self._on_results)
        bt3.grid(row=0, column=2, sticky='ew')
        bt3 = tk.Button(panel, text='Esci', command=self.destroy)
        bt3.grid(row=0, column=3, sticky='ew')
        panel.grid_columnconfigure(0, weight=1)
        panel.grid_columnconfigure(1, weight=1)
        panel.grid_columnconfigure(2, weight=1)
        panel.grid_columnconfigure(3, weight=1)
   
    def _on_save(self): pass
    def _on_open(self): pass
    def _on_results(self): pass


if __name__ == '__main__':
    Tabella_campionato().mainloop()

Non è una scheggia, troppi widget, ma Ti apparirà la tabella in un'area ridimensionabilecon scrollbar ... ciò perché penso che un tal genere di tabella sia più idoneo ad essere inserito in una form più "articolata" e non a se stante.

Ne parliamo poi, ciao :)