Geometry Management

Fragen zu Tkinter.
Antworten
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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.
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

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:
Alles wird gut ;-)
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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()
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

@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
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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:
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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:
Antworten