2016-05-04 14 views
1
setzen Rahmen

Ich habe diesen CodePython tkinter Platz auf den Boden

class App(object): 
    def __init__(self): 
     self.root = Tk() 
     self.root.attributes('-zoomed', True) 

     f1 = Frame(self.root, bd=1, bg="green", relief=SUNKEN) 
     f2 = Frame(self.root, bd=1, bg="red", relief=SUNKEN) 
     f3 = Frame(self.root, bd=1, bg="blue", relief=SUNKEN) 

     split = 0.5 
     f1.place(relx=0, relheight=1, relwidth=split) 
     f2.place(relx=split, relheight=1, relwidth=1.0 - split) 
     f3.place(height=50, width=self.screen_width) 

app = App() 
app.root.mainloop() 

und der Ausgang ist diese enter image description here

Wie kommt man zum unteren Rand des Fensters/Bildschirm, um den blauen Rahmen zu setzen?

+0

Sie benötigen eine Lösung mit 'place', oder erhalten Sie eine Antwort mit' pack' oder 'grid' akzeptieren? 'Die anderen beiden sind für die meisten Aufgaben überlegen, einschließlich derjenigen, die Sie erstellen möchten. –

+0

@BryanOakley Ich würde Pack akzeptieren, wenn es mir feste Breite und Höhe geben wird. Ich habe versucht Gitter, aber der Rahmen/Widget ist nicht behoben. Wenn Sie den grünen Rahmen mit einem Bild ändern, passen Rot und Blau auch seine Breite und Höhe an. Ich möchte nicht, dass sie sich anpassen. Wenn Sie mir eine Lösung im Grid geben können, die das Layout nicht anpassen wird, dann wäre das nett. :) –

Antwort

1

Ich weiß, dass Sie speziell nach place gefragt, aber ehrlich gesagt, sollten Sie place außer in sehr seltenen Fällen nicht verwenden. Das Layout, das Sie erreichen möchten, ist mit grid und pack sehr einfach.

Mit pack:

f3.pack(side="bottom", fill="x") 
f1.pack(side="left", fill="both", expand=True) 
f2.pack(side="right", fill="both", expand=True) 

grid Verwendung:

# row zero takes up all extra vertical space 
# column 0 and column 1 take an equal amount of all horizontal space 
self.root.grid_rowconfigure(0, weight=1) 
self.root.grid_columnconfigure(0, weight=1) 
self.root.grid_columnconfigure(1, weight=1) 

f1.grid(row=0, column=0, sticky="nsew") 
f2.grid(row=0, column=1, sticky="nsew") 
f3.grid(row=1, column=0, columnspan=2, sticky="ew") 
+0

Ich bin gebunden, um die f1 zu einem Bild zu ändern, aber die Breite anpassen http://pasteboard.co/F2TVG6U.png im mit Ihrem Grid-Code. Wie wird die gleiche Breite beibehalten? –