Pack() Probleme mit TK.....

Fragen zu Tkinter.
Antworten
CamelCase
User
Beiträge: 6
Registriert: Donnerstag 17. November 2011, 08:16
Wohnort: 66333 Völklignen

Hi Leute....

ich arbeite mich gerade in Python und TK ein und habe folgendes Problem:

Ein Hauptfenster soll in 4 Frames unterteilt werden:

Frame oben: Breite: gesamte Breite des Fensters /Höhe: ein Teil des Fensters
Frame links: Breite: Teil des Fensters /Höhe: ein Teil des Fensters
Frame rechts: Breite: Teil des Fensters /Höhe: ein Teil des Fensters

bis hierher klappts ja noch.....

Frame UNTEN: Breite: gesamte Breite des Fensters /Höhe: Resthöhe des Fensters
Im unteren Frame sollen Programminformationen und die Belegung der Funktionstasten angezeigt werden.

Das mag Pack() aber nun überhaupt nich.....
Grid() wollte ich mir für Tabellen u.ä. innerhalb der frames "aufsparen".

Beispielcode:

Code: Alles auswählen

import tkinter

def ende():
    app.destroy()

app=tkinter.Tk()
app.geometry("800x600")
app.title("Aufzugsverwaltung")

#frames

fr_oben=tkinter.Frame(app,height=50, width=800, bg="white")
fr_oben.pack(side= "top")

fr_mitteLinks=tkinter.Frame(app,height=500, width=100, bg="yellow")
fr_mitteLinks.pack(side="left", anchor="n")

fr_mitteRechts=tkinter.Frame(app,height=500, width=700, bg="green")
fr_mitteRechts.pack(side="right", anchor="n")

fr_unten=tkinter.Frame(app,height=50, width=800, bg="blue")
fr_unten.pack(side="bottom", anchor= "w")

app.mainloop()
Egal, welche Kombination aus side/anchor ich verwende, das untere Frame will er nich anzeigen ! :(

Lasse ich "app.geometry("800x600")" weg, wird das untere Frame angezeigt, aber wie !!!
Und der Rest des Fensters ist auch im Eimer.....

Da mein Englisch so ziemlich "under all Pig" ist, kann ich mit vielen Beiträgen im Web nicht so richtig was anfangen, deshalb wende ich mich an Euch.

Hat jemand vielleicht ne Idee, was ich hier falsch mache , oder wie man das anders lösen kann ? Ich stehe momentan ziemlich auf dem Schlauch. :K

Links zu deutschsprachigen Tutorials für TK wären ebenfalls SEHR willkommen, ich hab bis jetzt nur "altbackenes" Zeuch gefunden, was bei mir nicht funktioniert.
Ich benutze Python 3.22 mit TK 8.5

Vielen Dank im Voraus !!
Gibt Dir das Leben ne Zitrone, mach Limonade draus !!
An!ma
User
Beiträge: 1
Registriert: Montag 19. März 2012, 20:54

Hallo CamelCase,

wenn du die GUI auf denn ganzen Bildschirm legst dann kannst du dein unteres Frame sehen.
Was du auch sehen kannst ist das es erst nach deinem mitteLinks Frame beginnt.

Indem man zuerst Top dann Bottom und dann Mitte erzeugst konnte ich das Problem zumindest bei mir beheben.

Code: Alles auswählen

import tkinter

def ende():
    app.destroy()

app=tkinter.Tk()
app.geometry("800x600")
app.title("Aufzugsverwaltung")

#frames

fr_oben=tkinter.Frame(app,height=50, width=800, bg="white")
fr_oben.pack(side= "top")

fr_unten=tkinter.Frame(app,height=50, width=800, bg="blue")
fr_unten.pack(side="bottom", anchor= "w")

fr_mitteLinks=tkinter.Frame(app,height=500, width=100, bg="yellow")
fr_mitteLinks.pack(side="left", anchor="n")

fr_mitteRechts=tkinter.Frame(app,height=500, width=700, bg="green")
fr_mitteRechts.pack(side="right", anchor="n")

app.mainloop()
Leider kann ich dir aber nicht sagen warum das so ist, vllt. kann das ein anderer hier im Forum erklären, würde mich auch interessieren.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi CamelCase & An!ma

Willkommen in unserem Forum!

Habe die beiden mittleren Frames in ein separates Frame gesteckt. und alle beteiligten Frames mit den pack-Optionen 'fill' & 'expand' optimiert.

Code: Alles auswählen

import tkinter

def ende():
    app.destroy()

app=tkinter.Tk()
app.geometry("800x600")
app.title("Aufzugsverwaltung")

#frames

fr_oben=tkinter.Frame(app, height=50, bg="white")
fr_oben.pack(side="top", fill='x')

middle_container = tkinter.Frame(app)
middle_container.pack(fill='both', expand='True')

fr_mitteLinks=tkinter.Frame(middle_container, width=100, bg="yellow")
fr_mitteLinks.pack(side="left", fill='y')

fr_mitteRechts=tkinter.Frame(middle_container, bg="green")
fr_mitteRechts.pack(side="left", fill='both', expand=True)

fr_unten=tkinter.Frame(app, height=50, bg="blue")
fr_unten.pack(side="bottom", fill='x')

app.mainloop()
@CamelCase: Kannst die mein Skript einmal ausprobieren?

Gruß wuf :wink:
Take it easy Mates!
CamelCase
User
Beiträge: 6
Registriert: Donnerstag 17. November 2011, 08:16
Wohnort: 66333 Völklignen

Hallo Wuf und An!Ma,

beide Scripts funktionieren wie gewünscht !

Villemols Merci für die superschnelle Antwort !!

Dann kanns ja jetzt mit dem eigentlichen Progrämmchen losgehen...

Gibt bestimmt noch ein paar Fragen wegen Druck über TKinter, aber zuerst mal einige Möglichkeiten ausprobieren( Ghostscript, Freepdf etc.)

Danke nochmals!
Gibt Dir das Leben ne Zitrone, mach Limonade draus !!
BlackJack

@CamelCase: Bei `pack()` sollte man innerhalb des gleichen Container-Widgets immer nur *eine* Seite für alle Widgets verwenden. Sonst können ganz komische Dinge passieren inklusive Endlosschleifen im Layout-Code.
Antworten