Im Moment bin ich mit meinen archäologischen
Fähigkeiten am Ende und drehe mich im Kreis...
Im Prinzip geht es nur darum, ein grösseres
Canvas-Objekt vertikal zu scrollen.
Dies funktioniert auch einwandfrei mit
einer Spalte aus 'create_text()'-Objekten:
http://paste.pocoo.org/show/120564/
Verwende ich in meinem Canvas jedoch ein
Frame mit Entry-Widgets und
die 'create_window()'-Methode, so kann ich nur
bis zum Entry-Widget Nr.1516 scrollen.
Ab Widget Nr.2979 scheint in irgendeiner Form
ein Überlauf stattzufinden.
Liegts an mir oder am Tkinter?
Schon mal vielen Dank an diejenigen, die sich die Mühe machen,
hiermit zu experimentieren:
http://paste.pocoo.org/show/120565/
yipyip
Canvas Scrollregion Merkwürdigkeit
Die Anzahl der Entry-Widgets übergebe ich
explizit mit 'ROWS'.
Mit
erfasse ich zum Schluss alle Entry-Widgets für die
Scrollregion.
Nur wenn es aus irgendeinem Grund zuviele sind
funktioniert es nicht richtig.
Nehme ich ein Canvas und 'create_text()', dann
kann das Canvas auch noch viel grösser sein und es funktioniert.
(siehe 1. Snippet)
yipyip
explizit mit 'ROWS'.
Mit
Code: Alles auswählen
self.canvas.update_idletasks()
self.canvas.config(scrollregion=self.canvas.bbox(tk.ALL))
Scrollregion.
Nur wenn es aus irgendeinem Grund zuviele sind
funktioniert es nicht richtig.
Nehme ich ein Canvas und 'create_text()', dann
kann das Canvas auch noch viel grösser sein und es funktioniert.
(siehe 1. Snippet)
yipyip
Hallo yipyip
Stellte mit deinem Skript die genau gleichen Probleme fest. Es sieht fast so aus als ob der Tcl. Layout-Manager mit dieser Menge von Widget-Plazierungen überfordert ist. Habe nicht herausgefunden was der Tcl-Error: *_tkinter.TclError: Row out of bounds* genau bedeuten soll. Ich versuchte einmal jedes Eingabe-Widget in ein eigenes Canvas-Window-Objekt zu packen und so auf der Canvas zu platzieren. Und siehe da, dies scheint keine Probleme mehr zu machen. Hier das modifizierte Skript:
http://paste.pocoo.org/show/120722/
Enjoy programming with Tkinter!
Gruss wuf
Stellte mit deinem Skript die genau gleichen Probleme fest. Es sieht fast so aus als ob der Tcl. Layout-Manager mit dieser Menge von Widget-Plazierungen überfordert ist. Habe nicht herausgefunden was der Tcl-Error: *_tkinter.TclError: Row out of bounds* genau bedeuten soll. Ich versuchte einmal jedes Eingabe-Widget in ein eigenes Canvas-Window-Objekt zu packen und so auf der Canvas zu platzieren. Und siehe da, dies scheint keine Probleme mehr zu machen. Hier das modifizierte Skript:
http://paste.pocoo.org/show/120722/
Enjoy programming with Tkinter!
Gruss wuf
Take it easy Mates!
Hallo wuf,
Genial! Danke!
Anscheinend hängt es von der Gesamtgrösse
aller Widgets ab, die vom Layout-Manager zu
zu handhaben ist. Hier unterscheiden sich
pack() und grid() nicht unerheblich.
Bei
wird für PADY >= 24 wird die Ausgabe irgendwie 'gewrapped'.
Der 'out of bounds' Error stellt sich bei row =10000
oder column=10000 ein, ich vermute mal aufgrund dieser
krummen Zahl (keine 2er-Potenz), dass
hier explizit ein Selbstschutz für Tcl/Tk programmiert wurde.
yipyip
Genial! Danke!
Anscheinend hängt es von der Gesamtgrösse
aller Widgets ab, die vom Layout-Manager zu
zu handhaben ist. Hier unterscheiden sich
pack() und grid() nicht unerheblich.
Bei
Code: Alles auswählen
import Tkinter as tk
ROWS = 1000
PADY = 23 # Experimentierwert, fuer PADY < 24 alles ok
root = tk.Tk()
for y in xrange(ROWS):
en = tk.Label(root, text='%s' % y, pady=PADY)
en.grid(row=y, column=0)
#en.pack(pady=PADY)
root.mainloop()
Der 'out of bounds' Error stellt sich bei row =10000
oder column=10000 ein, ich vermute mal aufgrund dieser
krummen Zahl (keine 2er-Potenz), dass
hier explizit ein Selbstschutz für Tcl/Tk programmiert wurde.
yipyip