2011-09-24 12 views
11

Creazione di una piccola applicazione per uso personale con Python e ho pensato di provare la mia mano con una piccola programmazione della GUI usando Tkinter. Questa è la GUI che ho creato finora:Layout della GUI utilizzando Tk Grid Geometry Manager

GUI layout using Tkinter

dubbi di applicazione:

Come posso fare in modo che i tre LableFrames - A, B e C nello screenshot - hanno la stessa larghezza? (O meglio, avere la larghezza uguale al più largo dei tre? Ad esempio, nello screenshot, A è il più largo e vorrei che anche B e C fossero più larghi - fino alla linea D).

(Esso non deve calcolata in modo dinamico - è sufficiente se posso assicurare che la larghezza sono le stesse quando ho codificarlo, il primo round volta Essi non hanno bisogno di cambiare il tempo di esecuzione..)

Tk geometry griglia Gestore dubita:

  1. Quando si utilizzano i frame, è la griglia (riga, colonna) specifica solo la dimensione del frame o viene calcolato in base alla dimensione della forma (finestra di root)?

  2. Come viene determinata la dimensione di una colonna in una griglia?

  3. Non ho capito completamente cosa faccia il "peso" all'interno di una griglia. Quando dovrebbe essere usato?

Il Python GUI Codice:

import Tkinter 

if __name__ == '__main__': 
    form = Tkinter.Tk() 

    getFld = Tkinter.IntVar() 

    form.wm_title('File Parser') 

    stepOne = Tkinter.LabelFrame(form, text=" 1. Enter File Details: ") 
    stepOne.grid(row=0, columnspan=7, sticky='W', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

    helpLf = Tkinter.LabelFrame(form, text=" Quick Help ") 
    helpLf.grid(row=0, column=9, columnspan=2, rowspan=8, \ 
       sticky='NS', padx=5, pady=5) 
    helpLbl = Tkinter.Label(helpLf, text="Help will come - ask for it.") 
    helpLbl.grid(row=0) 

    stepTwo = Tkinter.LabelFrame(form, text=" 2. Enter Table Details: ") 
    stepTwo.grid(row=2, columnspan=7, sticky='W', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

    stepThree = Tkinter.LabelFrame(form, text=" 3. Configure: ") 
    stepThree.grid(row=3, columnspan=7, sticky='W', \ 
        padx=5, pady=5, ipadx=5, ipady=5) 

    inFileLbl = Tkinter.Label(stepOne, text="Select the File:") 
    inFileLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2) 

    inFileTxt = Tkinter.Entry(stepOne) 
    inFileTxt.grid(row=0, column=1, columnspan=7, sticky="WE", pady=3) 

    inFileBtn = Tkinter.Button(stepOne, text="Browse ...") 
    inFileBtn.grid(row=0, column=8, sticky='W', padx=5, pady=2) 

    outFileLbl = Tkinter.Label(stepOne, text="Save File to:") 
    outFileLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2) 

    outFileTxt = Tkinter.Entry(stepOne) 
    outFileTxt.grid(row=1, column=1, columnspan=7, sticky="WE", pady=2) 

    outFileBtn = Tkinter.Button(stepOne, text="Browse ...") 
    outFileBtn.grid(row=1, column=8, sticky='W', padx=5, pady=2) 

    inEncLbl = Tkinter.Label(stepOne, text="Input File Encoding:") 
    inEncLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2) 

    inEncTxt = Tkinter.Entry(stepOne) 
    inEncTxt.grid(row=2, column=1, sticky='E', pady=2) 

    outEncLbl = Tkinter.Label(stepOne, text="Output File Encoding:") 
    outEncLbl.grid(row=2, column=5, padx=5, pady=2) 

    outEncTxt = Tkinter.Entry(stepOne) 
    outEncTxt.grid(row=2, column=7, pady=2) 

    outTblLbl = Tkinter.Label(stepTwo, \ 
      text="Enter the name of the table to be used in the statements:") 
    outTblLbl.grid(row=3, column=0, sticky='W', padx=5, pady=2) 

    outTblTxt = Tkinter.Entry(stepTwo) 
    outTblTxt.grid(row=3, column=1, columnspan=3, pady=2, sticky='WE') 

    fldLbl = Tkinter.Label(stepTwo, \ 
          text="Enter the field (column) names of the table:") 
    fldLbl.grid(row=4, column=0, padx=5, pady=2, sticky='W') 

    getFldChk = Tkinter.Checkbutton(stepTwo, \ 
          text="Get fields automatically from input file",\ 
          onvalue=1, offvalue=0) 
    getFldChk.grid(row=4, column=1, columnspan=3, pady=2, sticky='WE') 

    fldRowTxt = Tkinter.Entry(stepTwo) 
    fldRowTxt.grid(row=5, columnspan=5, padx=5, pady=2, sticky='WE') 

    transChk = Tkinter.Checkbutton(stepThree, \ 
       text="Enable Transaction", onvalue=1, offvalue=0) 
    transChk.grid(row=6, sticky='W', padx=5, pady=2) 

    transRwLbl = Tkinter.Label(stepThree, \ 
       text=" => Specify number of rows per transaction:") 
    transRwLbl.grid(row=6, column=2, columnspan=2, \ 
        sticky='W', padx=5, pady=2) 

    transRwTxt = Tkinter.Entry(stepThree) 
    transRwTxt.grid(row=6, column=4, sticky='WE') 

    form.mainloop() 

(Nota: per Python 2.4.3)

risposta

10

Se si utilizza la stessa columnspan e utilizzare appiccicoso = 'noi' su tutti e tre LabelFrames allora dovrebbero avere la stessa larghezza. Ad esempio, si desidera utilizzare

stepTwo = Tkinter.LabelFrame(form, text=" 2. Enter Table Details: ") 
stepTwo.grid(row=2, columnspan=7, sticky='WE', \ 
      padx=5, pady=5, ipadx=5, ipady=5) 

Domande

1) Quando si utilizzano i frame, è la griglia (riga, colonna) specifica solo la dimensione del telaio o sia esso calcolato in base alla dimensione del modulo (finestra principale)?

C'è un'interdipendenza qui. La dimensione preferita del modulo dipenderà dalle dimensioni preferite dei bambini e dal layout, ma le dimensioni effettive dei bambini dipenderanno dalle dimensioni effettive del modulo e dal layout. Il layout viene eseguito dai figli alla radice per determinare le dimensioni preferite, quindi quando raggiunge la radice, la dimensione preferita viene utilizzata come dimensione effettiva (a meno che non venga sostituita). Il layout quindi torna indietro assegnando dimensioni reali.

2) Come viene determinata la dimensione di una colonna in una griglia?

La dimensione preferita di una colonna viene determinata in base alla larghezza minima preferita di tutti gli articoli in quella riga.La dimensione effettiva della colonna è determinata dalla dimensione preferita più una percentuale dello spazio extra del widget genitore.

3) Non ho compreso appieno cosa faccia "peso" all'interno di una griglia. Quando deve essere utilizzato ?

Il peso determina la percentuale di spazio extra che ho menzionato sopra. La quantità di spazio extra assegnato alla colonna è column_weight/total_weight.

+0

Risposta molto bella, Vaughn. –