2016-10-17 1 views
2

Ich versuche, einige UI in Python mit Tkinter zu machen. Tkinter - Gitterelemente nebeneinander

Dies ist ein Beispiel für den Code Ich verwende:

root = Tk() 
root.geometry("1000x700x0x0") 

canvas = Canvas(root, width = 700, height = 700, bg ='white').grid(row = 0, column = 0) 
button1 = Button(root, text = "w/e", command = w/e).grid(row = 0, column = 1) 
button2 = Button(root, text = "w/e", command = w/e).grid(row = 1, column = 1) 

Dies ist, was ich erhalte: enter image description here

und das ist, was ich will: enter image description here

Jede Hilfe Wie kann ich das machen?

Danke!

+1

zurück. Verwenden Sie 'grid (rowspan = ...)' für Canvas oder setzen Sie 'Frame' in die rechte Spalte und fügen Sie Schaltflächen in diesem Frame ein. – furas

+1

BTW: 'var = Widgets(). Grid()' weist 'None' zu' var' zu, weil 'grid()' 'None' zurückgibt. Wenn Sie Variablen benötigen, dann tun Sie es in zwei Schritten: 'var = Widget()' und 'var.grid()'. – furas

+0

Das 'Grid (rowspan = ...)' löste es, danke @furas – JMz

Antwort

3

Da Ihre GUI zwei logische Gruppen von Widgets zu haben scheint, würde ich sie als solche organisieren. Beginnen Sie, indem Sie die Leinwand auf der linken Seite und einen Rahmen auf der rechten Seite platzieren. Sie können pack, place, grid oder ein paned-Fenster verwenden, um sie zu verwalten. Für eine Links-nach-rechts-Ausrichtung ist pack aufgrund seiner Einfachheit eine gute Wahl

Beachten Sie, dass Sie es nicht so machen müssen, aber die Erfahrung hat mich gelehrt, es macht Layout-Probleme viel einfacher zu lösen.

Im folgenden Beispiel I expand-False für die Schaltfläche Rahmen gesetzt, was bedeutet, dass die Leinwand wird wachsen und schrumpfen, wenn der Benutzer die Größe (weil es expand=True), aber die Tasten nur genau so viel Platz in Anspruch nehmen als Sie brauchen.

canvas = Canvas(root, ...) 
buttonframe = Frame(root, ...) 

canvas.pack(side="left", fill="both", expand=True) 
buttonframe.pack(side="right", fill="both", expand=False) 

Als nächstes können Sie alle Schaltflächen auf der rechten Seite platzieren, ohne sich Gedanken machen zu müssen, wie sich ihre Platzierung auf Objekte auf der linken Seite auswirken könnte.

Wichtig bei der Verwendung von grid ist, dass Sie mindestens eine Zeile und mindestens eine Spalte angeben müssen, um zusätzlichen Speicherplatz zu erhalten. Dies kann eine Zeile und/oder Spalte sein, die Widgets enthält, oder eine leere Zeile und Spalte an einer Kante.

button1 = Button(buttonframe, ...) 
button2 = Button(buttonframe, ...) 
button3 = Button(buttonframe, ...) 
... 
button1.grid(row=0, column=0) 
button2.grid(row=0, column=1) 
button3.grid(row=1, column=0) 
... 
buttonframe.grid_rowconfigure(100, weight=1) 
buttonframe.grid_columnconfigure(2, weight=1) 

Anmerkung: Wenn Sie einen Verweis auf ein Widget zu halten brauchen, müssen Sie das Widget erstellen und grid (oder pack oder place) auf zwei getrennten Linien nennen. Denn Button(...).grid(...) gibt den Wert des letzten Funktionsaufrufs zurück, und grid(...) gibt None

+1

Danke für all deine Antworten Bryan. Wann immer es eine Frage über 'tkinter' gibt, scheint es immer eine Antwort zu geben! –