2012-05-04 26 views
15

Dopo aver inizializzato tutti i frame e i widget nel metodo __init__, la finestra di tkinter viene ridimensionata per adattarsi a tutti questi componenti.Come impostare una dimensione minima della finestra in tkinter?

Vorrei impostare la dimensione iniziale della finestra come dimensione minima. Voglio essere in grado di massimizzare e scalare la finestra più grande, ma non voglio mai che la finestra sia sufficientemente piccola da iniziare a nascondere i widget.

Come posso realizzare questo?

+0

Stai dicendo di voler limitare l'utente a ridurre la finestra? Hai letteralmente così tanti widget che alcuni vengono tagliati, o si tratta di un problema di layout in cui le cose vengono tagliate via forse in modo errato (ad esempio: una barra di scorrimento scompare piuttosto che un widget di testo che si restringe)? –

risposta

27

È inoltre possibile forzare un aggiornamento subito senza inserendo il tuo mainloop, utilizzando qualcosa di simile:

root = Tk() 
# set up widgets here, do your grid/pack/place 
# root.geometry() will return '1x1+0+0' here 
root.update() 
# now root.geometry() returns valid size/placement 
root.minsize(root.winfo_width(), root.winfo_height()) 

descrizione update() a effbot tkinterbook:

Elabora tutti gli eventi in sospeso, richiama callback eventi, completa qualsiasi in attesa di gestione della geometria, ridisegna i widget secondo necessità e chiama tutte le attività inattive in sospeso. Questo metodo dovrebbe essere usato con cautela, dal momento che lo può portare a condizioni di gara molto brutte se chiamato dal posto sbagliato (ad esempio da una richiamata di evento, ad esempio, o da una funzione che può essere chiamata in qualsiasi modo da un evento callback, ecc.). Quando si è nel dubbio , utilizzare invece update_idletasks.

Ho usato questo un buon compromesso mentre cercavo di capire come fare cose come ottenere la dimensione/posizione dei widget prima di saltare nel ciclo principale.

+0

Questo è molto più pulito della mia risposta. Grazie! –

+0

Ehi, l'esperto di John the Python! Per favore guarda http://stackoverflow.com/questions/23022005/python-tkinter-tree-selection –

2

ho capito:

def __init__(self, master): 
    ... 
    self.master.update_idletasks() 
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height())) 
-3
root = Tk() 

Poiché viene creata la finestra radice. La finestra radice è una finestra principale dell'applicazione nei nostri programmi. Ha una barra del titolo e bordi. Questi sono forniti dal gestore di finestre. Deve essere creato prima di qualsiasi altro widget.

root.geometry("250x150+300+300") 

Il geometria() metodo imposta una dimensione per la finestra e posiziona sullo schermo. I primi due parametri sono larghezza e altezza della finestra. Gli ultimi due parametri sono x, y coordinate dello schermo.

app = Example(root) 

Qui viene creata l'istanza della classe dell'applicazione.

root.mainloop() 

Infine, entriamo nel mainloop. La gestione degli eventi inizia da questo punto. Il mainloop riceve eventi dal sistema di finestre e li invia ai widget dell'applicazione. Si termina quando clicchiamo sul pulsante di chiusura della barra del titolo o chiamiamo il metodo quit().

enter image description here

Spero che hai trovato questo utile.

+0

Questo non sembra rispondere alla domanda. Cosa deve fare la tua risposta con l'impostazione della dimensione minima di una finestra? –

+0

Non esiste una singola funzione magica per forzare una cornice a una dimensione minima o fissa. Tuttavia, puoi sicuramente forzare la dimensione di un frame dando al telaio una larghezza e un'altezza. – miksiii

4

So che questa domanda è vecchio, ma qui è un altro modo:

root = Tk() 
root.minsize(foo, bar) 

root.minsize() stabilisce dimensioni minime della finestre per foo e bar, dove foo e bar sono rispettivamente la larghezza e l'altezza della finestra.

È necessario, tuttavia, inserire questo codice prima del mainloop.

+0

Non è vero che DEVI mettere quel codice prima del mainloop. –

Problemi correlati