Seite 1 von 1
Automatisches Vergrößern von Widgets mit grid()
Verfasst: Sonntag 24. April 2011, 22:02
von paddg 42
Hallo,
ich habe ein Problem mit dem Grid-Manager.
In meinem Beispielprogramm (soll nur das Problem verdeutlichen) will ich ein Text-Widget so einrichten, dass es sich automatisch mit dem Fenster vergrößert.
Ich habe dazu Methoden benutzt, die ich in einigen Tutorials gelesen habe. Leider funktioniert mein momentaner Code noch nicht.
Code: Alles auswählen
import Tkinter
class Textfenster(Tkinter.Frame):
def __init__(self, master):
Tkinter.Frame.__init__(self, master)
self.grid()
self.set_widget()
def set_widget(self):
self.text = Tkinter.Text(self)
self.text.grid(row=0, column=0, sticky="wens")
self.rowconfigure(0, weight=2, minsize=200)
self.columnconfigure(0, weight=2, minsize=200)
t = Textfenster(Tkinter.Tk())
t.mainloop()
Für eure Hilfe wäre ich sehr dankbar.
Re: Automatisches Vergrößern von Widgets mit grid()
Verfasst: Sonntag 24. April 2011, 23:25
von BlackJack
@paddg 42: Widgets sollten sich nicht selbst "layouten". Das macht sie unflexibel. Wenn Du das ``self.grid()`` aus der `__init__()` heraus nimmst und statt dessen nach dem erstellen ein ``t.pack(fill=Tkinter.BOTH, expand=True)`` einfügst, sollte es gehen.
Re: Automatisches Vergrößern von Widgets mit grid()
Verfasst: Montag 25. April 2011, 10:27
von paddg 42
In meinem Beispielprogramm funktioniert es wunderbar.
In meinem eigentlichen Programm gibt es aber über dem Text-Widget noch Labels bzw. Buttons.
In folgendem Programm vergrößert sich das Text-Widget zwar wie gewünscht, allerdings werden die Labels so verschoben, dass das Label1 mehr "Freiraum" bekommt als die anderen.
Code: Alles auswählen
import Tkinter
class Textfenster(Tkinter.Frame):
def __init__(self,master):
Tkinter.Frame.__init__(self,master)
self.set_widgets()
def set_widgets(self):
self.label1=Tkinter.Label(self,text="Label1")
self.label1.grid(row=0,column=0)
self.label2=Tkinter.Label(self,text="Label2")
self.label2.grid(row=0,column=1)
self.label3=Tkinter.Label(self,text="Label3")
self.label3.grid(row=0,column=2)
self.label4=Tkinter.Label(self,text="Label4")
self.label4.grid(row=0,column=3)
self.text=Tkinter.Text(self)
self.text.grid(row=1,column=0,columnspan=4,sticky="wens")
self.rowconfigure(0,weight=2,minsize=200)
self.columnconfigure(0,weight=2,minsize=200)
t=Textfenster(Tkinter.Tk())
t.pack(expand=True,fill="both")
t.mainloop()
Wenn man die Zeile "self.columnconfigure(0,weight=2,minsize=200)" weglässt, sind die Buttons zwar gleichmäßig verteilt, aber das Text-Widget kann nur nach unten vergrößert werden.
Für einen Lösungsvorschlag, bei dem sich das Text-Widget in beide Richtungen vergrößert
und die Labels oben gleichmäßig verteilt werden, wäre ich sehr dankbar.
Re: Automatisches Vergrößern von Widgets mit grid()
Verfasst: Montag 25. April 2011, 10:47
von BlackJack
@paddg 42: Du musst ein `weight` für alle Zeilen und Spalten im Grid setzen, die vertikal oder horizontal ihre Grösse ändern sollen. Du willst ja nicht nur dass sich vertikal die grösse von dem `Text`-Widget ändert, sondern auch die `Label` darüber sollen sich gleichmässig vergrössern. Also musst Du bei Zeile 1 ein Gewicht setzen und bei den Spalten 0 bis 3 auch. Ich würde da auch Gewicht 1 statt 2 nehmen, denn wenn überall 2 steht, läuft es ja doch wieder auf 1 hinaus.
Re: Automatisches Vergrößern von Widgets mit grid()
Verfasst: Montag 25. April 2011, 11:00
von paddg 42
Das klappt so weit.
Danke für die Hilfe.