2014-07-09 8 views
6

Ho una piccola applicazione di prova Python mentre sto imparando sia Python che Tkinter e sto cercando di capire come ridimensionare uniformemente una griglia di etichette in una finestra. Mi piacerebbe creare una grande griglia di quadrati colorati differenti, quindi sto usando etichette con un set di colori di sfondo per creare i quadrati. Vorrei ridimensionare automaticamente i quadrati quando l'utente espande la finestra e poi ridimensionarli e ridimensionarli in modo che abbiano tutte le stesse dimensioni di quando la finestra viene ridotta di dimensioni.Python Tkinter - ridimensiona i widget in modo uniforme in una finestra

Qualcosa di simile a questo:

Default "square" size. Opens up at this size by default.

che ridimensiona e scale in modo uniforme in questo modo:

Size when the window is expanded in size.

In altre parole: ogni etichetta dovrebbe tutta scala più uniforme la bilancia delle finestre. Non sono nemmeno sicuro se sto usando i termini corretti con "window" e "widget". Ma sto mettendo le etichette su una GUI.

Codice di prova che sto usando per cercare di arrivare a questo lavoro:

import Tkinter 

class simpleapp_tk(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

     label = Tkinter.Label(self,anchor="center",bg="green") 
     label.grid(column=0,row=0,sticky='EW') 

     label2 = Tkinter.Label(self,anchor="center",bg="black") 
     label2.grid(column=1,row=0,sticky='EW') 

     label3 = Tkinter.Label(self,anchor="center",bg="red") 
     label3.grid(column=2,row=0,sticky='EW') 

     label4 = Tkinter.Label(self,anchor="center",bg="purple") 
     label4.grid(column=0,row=1,sticky='EW') 

     label5 = Tkinter.Label(self,anchor="center",bg="blue") 
     label5.grid(column=1,row=1,sticky='EW') 

     label6 = Tkinter.Label(self,anchor="center",bg="yellow") 
     label6.grid(column=2,row=1,sticky='EW') 


     self.grid_columnconfigure(0,weight=0) 

if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title("Test App") 
    app.mainloop() 

risposta

8

Dare tutte le righe e le colonne lo stesso peso diverso da zero.

Ad esempio:

self.grid_columnconfigure(0,weight=1) 
self.grid_columnconfigure(1,weight=1) 
self.grid_columnconfigure(2,weight=1) 
self.grid_rowconfigure(0,weight=1) 
self.grid_rowconfigure(1,weight=1) 
+0

Impressionante! Grazie! Ho guardato ma non ho trovato un'impostazione "predefinita" per TUTTE le righe e le colonne. Sai se esiste o dovrò aggiungere "self.grid_columnconfigure (0, weight = 1)" e "self.grid_columnconfigure (1, weight = 1)" per tutte le colonne e tutte le righe separatamente? – user1340081

+1

Dovrai farlo individualmente per ogni riga e colonna –

+0

Impressionante. Grazie ancora! – user1340081

3

Completamento answer forniti da Bryan Oakley, il codice per risolverlo in pitone 3 è il seguente.

Si noti che un'opzione per gestire la proporzione per cui la finestra ridimensiona sta impostando i parametri di peso per le funzioni grid_columnconfigure(1,weight=1) e grid_rowconfigure(1,weight=1) su valori diversi.

import tkinter 

class simpleapp_tk(tkinter.Tk): 
    def __init__(self,parent): 
     tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

     label = tkinter.Label(self,anchor="center",bg="green") 
     label.grid(column=0,row=0,sticky='NSEW') 

     label2 = tkinter.Label(self,anchor="center",bg="black") 
     label2.grid(column=1,row=0,sticky='NSEW') 

     label3 = tkinter.Label(self,anchor="center",bg="red") 
     label3.grid(column=2,row=0,sticky='NSEW') 

     label4 = tkinter.Label(self,anchor="center",bg="purple") 
     label4.grid(column=0,row=1,sticky='NSEW') 

     label5 = tkinter.Label(self,anchor="center",bg="blue") 
     label5.grid(column=1,row=1,sticky='NSEW') 

     label6 = tkinter.Label(self,anchor="center",bg="yellow") 
     label6.grid(column=2,row=1,sticky='NSEW') 


     self.grid_columnconfigure(0,weight=1) 
     self.grid_columnconfigure(1,weight=1) 
     self.grid_columnconfigure(2,weight=1) 
     self.grid_rowconfigure(0,weight=1) 
     self.grid_rowconfigure(1,weight=1) 


if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title("Test App") 
    app.mainloop() 
+0

Un'opzione per gestire la proporzione per la quale la finestra ridimensiona sta impostando i parametri di peso su valori diversi. – aturegano

Problemi correlati