Seite 1 von 1

Geometry Management

Verfasst: Donnerstag 7. Mai 2009, 12:26
von 4bit
Das GUI an dem ich gerade arbeite soll in rechts und links unterteilt sein. Ich nutze den pack() Manager. Ich würde gerne zwei Frames benutzen, einen für links und einen für rechts.

(1) Die Position von Widgets innerhalb von Frames wird mit pack() festgelegt
(2) Die Positionen der Frames innerhalb eines Fensters werden nicht mit pack() festgelegt?!

Code: Alles auswählen

root = Tk()
rechts = Frame
links = Frame
rechts.pack(root, {"side":"right"})
links.pack(root, {"side":"left"})
Ruft die Fehlermeldung:


TypeError: unbound method pack_configure() must be called with Frame instance as first argument (got Tk instance instead)


hervor.

Habe Effbot und New Mexiko durchforstet und viele Definitionen gefunden, aber keine Patterns, die ich benutzen konnte.
Weiß Jemand, was ich meine und warum das eine Fehlermeldung gibt?

Grüße,
4bit.

Verfasst: Donnerstag 7. Mai 2009, 12:37
von busfahrer
Hallo

Code: Alles auswählen

root = Tk()
rechts = Frame(root)
links = Frame(root)
rechts.pack({"side":"right"})
links.pack({"side":"left"})
So sollte es eher funktionieren.

Gruß...busfahrer

Edit: sorry "root aus .pack() entfernt.
So sollte/könnte es laufen :oops:

Verfasst: Donnerstag 7. Mai 2009, 13:10
von 4bit
Stimmt.
Ok jetzt habe ich die beiden Frames und möchte jeweils verschiedene Widgets reinpacken.

(1) Soll ich dazu Widgets, die im rechten Frame erscheinen sollen als rechts.Widget erschaffen, oder
(2) können die Widgets irgendwo angehängt werden, solange nur im Konstruktor der gewünschte Frame-Name als Parameter auftaucht?

Grüße,
4b

Verfasst: Donnerstag 7. Mai 2009, 14:07
von numerix
4bit hat geschrieben:(1) Soll ich dazu Widgets, die im rechten Frame erscheinen sollen als rechts.Widget erschaffen
Das dürfte auch Geschmackssache sein. Ich persönlich mache es nicht so.

Was deinen Code angeht: Du solltest dich vielleicht von der längst überholten Dictionary-Schreibweise verabschieden, ebenso vom Sternchenimport. Also z.B. so:

Code: Alles auswählen

import Tkinter as tk

root = tk.Tk()
rechts = tk.Frame(root)
links = tk.Frame(root)
links.pack(side="left")
rechts.pack(side="left") # !

for k in range(10):
    tk.Button(links, text="Knopf %i" %k).pack()

for k in range(10):
    tk.Label(rechts, text="Label %i" %k).pack()

root.mainloop()

Verfasst: Donnerstag 7. Mai 2009, 15:00
von yipyip
@4bit:
Hier noch ein Pattern zum Experimentieren:

Code: Alles auswählen

#!/usr/bin/env python

####

import Tkinter as tk

####
    
class Gui(object):
  

  def __init__(self, texts, colors):

    self.root = tk.Tk()
    self.frames = [tk.Frame(self.root, bg=col) for col in colors]
    self.labels = [tk.Label(frame, text=txt, bg=col)
                   for frame, txt, col in zip(self.frames, texts, colors)]

    for i, (frame, lab) in enumerate(zip(self.frames, self.labels)):
      frame.grid(row=0, column=i) #.pack(side=tk.LEFT)
      lab.pack(padx=80, pady=80) 
    
     
  def run(self):

    self.root.mainloop()

####
    
if __name__ == '__main__':

  colors = ('red', 'green', 'yellow')
  texts = ('ein Frame', 'noch ein Frame', 'und noch einer')
  Gui(texts, colors).run()
:wink:
yipyip

Verfasst: Donnerstag 7. Mai 2009, 15:03
von 4bit
Hi numerix

Der Vorteil beim Sternchen Import ist, daß ich den Modulnamen nicht jedes Mal mitschreiben muss.
Die Dictionary schreibweise für Optionen ist etwas umständlich, da stimme ich dir zu.

Verfasst: Donnerstag 7. Mai 2009, 15:09
von numerix
4bit hat geschrieben:Der Vorteil beim Sternchen Import ist, daß ich den Modulnamen nicht jedes Mal mitschreiben muss.
Wenn dich die Nachteile auch interessieren, kannst du ja mal quer durchs Forum zum Thema "Sternchenimport" lesen:
http://www.python-forum.de/search.php?mode=results :wink:

Verfasst: Donnerstag 7. Mai 2009, 16:22
von derdon
So ein Link hilft wenig, weil man bei phpBB nicht auf Suchergebnisse verlinken kann. Oder war das gar nicht dein Ziel und du wolltest nur zur "Suchseite" verlinken?

Verfasst: Donnerstag 7. Mai 2009, 16:26
von numerix
derdon hat geschrieben:So ein Link hilft wenig, weil man bei phpBB nicht auf Suchergebnisse verlinken kann. Oder war das gar nicht dein Ziel und du wolltest nur zur "Suchseite" verlinken?
Ups! Hab ich gar nicht gemerkt. Danke für den Hinweis.
Also, 4bit, wenn du auf den Link geklickt hast, musst du in das Suchfeld "Sternchenimport" eintippen - dann kommt eine ganze Seite voll mit Threads ... :wink: