frames mit pack nebeneinander positionieren ?

Fragen zu Tkinter.
Antworten
Back2basic
User
Beiträge: 23
Registriert: Montag 23. April 2012, 09:53

Moin,

ich arbeite mich gerade in TKinter ein und muss schon ziemlich schnell feststellen das Python und GUI eine ziemlich knifflige Angelegenheit sind..

Meine Frage ist, wie kann ich meine Frames auch nebeneinander positionieren... bei mir wird durch .pack() nur unterhalb angefügt, trotz fester fenstergröße etc.

Hier der Code

Code: Alles auswählen

class WindowBuilder():

    def __init__(self):

        window = tk.Tk() # create a new Window
        window.title("Sudoku 2013") # Set title of the new window
        window.geometry('300x100') # set size of the window
        window.grid()
        frame1 = tk.Frame(window, width=100, height=100, background="bisque")
        frame2 = tk.Frame(window, width=50, height = 50, background="#b22222")
        frame3 = tk.Frame(window, width= 50, height = 50, background = 'blue') # Hold entries
        frame1.pack(fill=None, expand=False)
        frame2.pack(fill=None, expand=False,  side=LEFT )
        frame3.pack(fill=None, expand=False)
        window.mainloop() # Create an event loop
Falls jemand Rat weiß :-)
BlackJack

@Back2basic: Innerhalb eines Containerwidgets sollte man bei allen `pack()`-Aufrufen die gleiche Seite verwenden. Also zum Beispiel entweder nur `tk.TOP` oder nur `tk.LEFT`. Wenn innerhalb eines Fensters sowohl etwas übereinander als auch etwas anderes untereinander gepackt werden soll, dann muss man weitere (Sub)Container einführen. Zum Beispiel `tk.Frame`. Innerhalb des Frames kann man dann eine Seite verwenden und den Frame mit anderen Elementen dann mit einer anderen Seite in das Hauptfenster packen. Was in den Frame kommt und ob das unter- oder nebeneinander platziert werden soll und ob der Frame im Hauptfenster dann relativ zu dem anderen Widget dann unter- oder nebeneinander platziert werden muss, kann man aus Deinem Code nicht ersehen. Genau da liegt das Problem — so wie Du das versucht hast ist das nicht eindeutig.

Von den fest vorgegebenen Grössen, insbesondere bei den äusseren Containerwidgets solltest Du Abstand nehmen. Die Grösse der Gesamtoberfläche ergibt sich automatisch von den enthaltenen Komponenten. Und das ist dynamisch und abhängig vom System, den Bildschirm und Schrifteinstellungen, und der Anzeigehardware.

Edit: `WindowBuilder` ist ein eigenartiger Name für diese Klasse. Und zumindest was dort bis jetzt steht, könne man auch in eine Funktion schreiben.

Der `grid()`-Aufruf auf dem `Tk`-Objekt macht keinen Sinn.
Antworten