Button über mehrere Zeilen

Fragen zu Tkinter.
Antworten
loganX
User
Beiträge: 9
Registriert: Donnerstag 2. Januar 2014, 11:26

Hallo,

ich verzweifel grad an einer kleinen Banalität, und zwar möchte ich einen Button in meiner GUI (platziert mit .grid) über mehrere Zeilen und Spalten im Raster haben. Mit columnspan zieht sich der Button jetzt über mehrere Spalten, jedoch funktioniert das ganze nicht mit rowspan. Das Attribut "sticky="wens"" hat mir leider nicht weiter geholfen. Warum ist das so?

Danke im Voraus
BlackJack

@loganX: Woher weisst Du denn das es nicht über mehrere Zeilen im `grid()` geht? Hast Du denn in diesen `grid()`-Zeilen neben der Schaltfläche noch irgendwelche anderen Widgets platziert und die werden jetzt nicht richtig angezeigt? Denn ohne andere Widgets in den Zeilen macht ein `rowspan` keinen Sinn.

Zeig doch mal ein minimales, aber lauffähiges Beispiel welches das Problem zeigt.
loganX
User
Beiträge: 9
Registriert: Donnerstag 2. Januar 2014, 11:26

Code: Alles auswählen

from tkinter import *

Hauptfenster = Tk()

Label(text="Zeile 1").grid(row=0,column=0,columnspan=4)
Label(text="Zeile 2").grid(row=1,column=0,columnspan=2)
Label(text="Zeile 3").grid(row=2,column=0,columnspan=2)
Label(text="Zeile 4").grid(row=3,column=0,columnspan=2)
Button(text="Button").grid(row=1,column=2,rowspan=3,columnspan=2)

Hauptfenster.mainloop()
Das wäre so ein kleines Beispiel, der Button müsste doch eigentlich über Zeile 2,3,4 gehen, oder? Zumindest hätte ich das so gern, nur wird er einfach in der Mitte platziert
BlackJack

@loganX: Da fehlt halt noch das `sticky`-Argument. Und auch wenn das hier wahrscheinlich noch überall problemlos funktionieren wird: als erstes Argument bei Widgets muss man immer das Elternwidget angeben. Sonst gibt es irgendwann Chaos in der Anzeige.

Code: Alles auswählen

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk


def main():
    hauptfenster = tk.Tk()
    tk.Label(hauptfenster, text='Zeile 1').grid(row=0, column=0, columnspan=4)
    tk.Label(hauptfenster, text='Zeile 2').grid(row=1, column=0, columnspan=2)
    tk.Label(hauptfenster, text='Zeile 3').grid(row=2, column=0, columnspan=2)
    tk.Label(hauptfenster, text='Zeile 4').grid(row=3, column=0, columnspan=2)
    tk.Button(hauptfenster, text='Button').grid(
        row=1, column=2, rowspan=3, columnspan=2, sticky='NWSE'
    )
    hauptfenster.mainloop()


if __name__ == '__main__':
    main()
loganX
User
Beiträge: 9
Registriert: Donnerstag 2. Januar 2014, 11:26

funktioniert das bei dir, dass er den Button jetzt auf mehreren Zeilen platziert, bei mir nämlich immernoch nicht :?
loganX
User
Beiträge: 9
Registriert: Donnerstag 2. Januar 2014, 11:26

das liegt wohl am Mac. Bei einem Kommilitonen funktioniert es wie geplant.
Antworten