Verfasst: Mittwoch 25. Juni 2008, 13:14
Normale Frames kann man wirklich nicht scrollen. Wie wäre es dann aber z.B. mit ScrolledWindow in Tix: http://tix.sourceforge.net/
MfG
HWK
MfG
HWK
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Hi Pü-Ton!Pü-Ton hat geschrieben:Es ist so, dass aus dem XML zum einen Die Namen ausgelesen werden - das sind wirklich nur Texte und daneben (rechts davon) kommen Entrys hin, in denen ein defaultwert steht. Ich kann also kein reines Textwidget nehmen...
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
# Textwidget statt Canvas, das kann mehr als man denkt
text = tk.Text(root, width=60, height=20)
text.grid(row=2, column=1)
# nur die Scrollbar einfuegen
scroll_y = tk.Scrollbar(root, orient=tk.VERTICAL, command=text.yview)
scroll_y.grid(row=2, column=2, sticky=tk.NS)
# xml-Datendict und variablen-Zwischenspeicher initialisieren
xml_dict = {"Vorname":"Michael", "Nachname":"Ballack", "Position":"Mittelfeld"}
variable_dict = {}
# xml-Daten einfuellen, pro Eintrag eine tk-Variable definieren und ein
# Entry einfuegen
for tag_name, default_value in xml_dict.iteritems():
text.insert(tk.END, "%s: "%tag_name)
tk_var = tk.StringVar()
tk_var.set(default_value)
variable_dict[tag_name] = tk_var
text.window_create(tk.END, window=tk.Entry(text, width=20, textvariable=tk_var))
text.insert(tk.END, "\n")
# Scrollbalken verknuepfen und Textaenderungen unterbinden
text.config(yscrollcommand=scroll_y.set, state=tk.DISABLED)
root.mainloop()
# Ergebnisdict aus den xml-Schluesseln und den tk-Variablen ermitteln
result_dict = dict([(tag, variable_dict[tag].get()) for tag in xml_dict])
print result_dict
Code: Alles auswählen
canvas.config(scrollregion=canvas.bbox("all"))
Code: Alles auswählen
from Tkinter import*
import Tkinter as TK
import Canvas
tk = TK.Tk()
yscroll = TK.Scrollbar(tk, orient = TK.VERTICAL)
yscroll.grid(row = 1, column = 2, sticky = TK.NS)
canvas = TK.Canvas(tk,
width = 300,
height = 300,
scrollregion = "0 0 400 400", ## Scrollregion im Bereich 0,0 - 400, 400
yscrollcommand = yscroll.set, ## Canvashoehe an yscroll uebergeben
bg="#9999ff")
canvas.grid(row = 1, column = 1)
yscroll.config(command=canvas.yview) ## yscrollwerte an canvas uebergeben
n=0
for i in range(30):
n = n+25
Dummy_var=Label(canvas,text="tadaaaa", font=("Arial",12, "bold"), anchor=CENTER, fg="#FFFFFF", bg="#990000", width=20)
canvas.create_window(45,15+n,window=Dummy_var, anchor=W)
tk.mainloop()
Das geht so lange gut, bis Deine Widgets tiefer als y=400 plaziert werden, während Du auch dann über 400 pixel scrollen kannst/musst, wenn sich weniger Widgets im Canvas befinden. Bitte berücksichtige daher die letzte Empfehlung meines letzten Posts weiter oben.Pü-Ton hat geschrieben:Code: Alles auswählen
scrollregion = "0 0 400 400", ## Scrollregion im Bereich 0,0 - 400, 400
Das ist die meist gewünschte und manchmal verhasste Eigenschaft des grid-Managers.Pü-Ton hat geschrieben: Bei meinen ganzen Versuchen davor wurde das Fenster immer gleich so gross, wieviel Einträge da waren !!!
Code: Alles auswählen
canvas.config(scrollregion=canvas.bbox("all"))
Meines Wissens gibt es dabei kein Attribut maxsize, sondern nur minsize.Michael Schneider hat geschrieben:Aber wie weiter oben beschrieben kannst Du dessen mit rowconfigure/columnconfigure + maxsize Herr werden.
Ja, das Graue dürfte der Schieber sein, der über die gesamte Länge der Scrollbar geht. Das passiert genau dann, wenn der gesamte Inhalt noch in den sichtbaren Bereich passt. Erst wenn die ersten Widgets außerhalb des sichtbaren Bereichs plaziert werden, wird der Scrollbereich erweitert und der Schieber wird angepasst.Pü-Ton hat geschrieben:hmmm,
wenn ich dasverwende, ist die Scrollbar zwar da, sieht aber ausgegraut aus und der eigentliche Schieber fehlt !!!Code: Alles auswählen
canvas.config(scrollregion=canvas.bbox("all"))
Hi HWK,HWK hat geschrieben:Meines Wissens gibt es dabei kein Attribut maxsize, sondern nur minsize.Michael Schneider hat geschrieben:Aber wie weiter oben beschrieben kannst Du dessen mit rowconfigure/columnconfigure + maxsize Herr werden.