Der horizontale Bildlauf nicht aktivieren für ttk Treeview-widget
Ich bin mit dem ttk Treeview-widget zu implementieren, die einen Ordner/Pfad-Auswahl-dialog. Es ist alles wie erwartet funktioniert, außer, dass meine horizontale Bildlaufleiste nicht aktivieren. Egal, wie weit Sie den Ordner-Pfad geht horizontal und egal wie schmal das Fenster, der horizontale Schieberegler nicht angezeigt wird. Vertikales scrollen funktioniert perfekt, obwohl.
Ich bin es, herauszufinden, es ist entweder eine Art von Einschränkung, wenn Sie nur eine Spalte in der Strukturansicht, oder einfach nur ein newbie Fehler mit der Konfiguration und Anbindung der widgets. Ich Wette auf den letzteren.
Beispiel mit dialog erweitert, um zu zeigen, vollen Ordner, Tiefe:
Dialog verengt zu dem Punkt, wo der horizontale Bildlauf aktivieren soll (aber nicht tut):
Hier mein GUI-layout-code:
winDirSel = tk.Toplevel()
winDirSel.title('Select Test Directory...')
tvwDirSel = ttk.Treeview(winDirSel,
height=10,padding=3,
show='tree')
lblTestDir = tk.Label(winDirSel, relief=tk.SUNKEN,
justify=tk.LEFT, anchor=tk.W,
textvariable=ctrlTestDir,width=80)
scbHDirSel = ttk.Scrollbar(winDirSel,
orient=tk.HORIZONTAL,
command=tvwDirSel.xview)
scbVDirSel = ttk.Scrollbar(winDirSel,
orient=tk.VERTICAL,
command=tvwDirSel.yview)
tvwDirSel.configure(xscrollcommand=scbHDirSel.set,
yscrollcommand=scbVDirSel.set)
lblTestDir.grid(row=0,column=0,sticky=tk.EW)
tvwDirSel.grid(row=1,column=0,sticky=tk.NSEW)
scbVDirSel.grid(row=1,column=1,sticky=tk.NS)
scbHDirSel.grid(row=2,column=0,sticky=tk.EW)
winDirSel.rowconfigure(1,weight=1)
winDirSel.columnconfigure(0,weight=1)
minwidth
parameter pro Spalte, sowie spielen mit stretch=False
. Es buggy ist in dieser Hinsicht.InformationsquelleAutor JDM | 2013-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, nach einigen spielen mit
minwidth
undstretch
denke ich, habe ich einen besseren Griff auf Sie. Das horizontale scrollen ausgelöst wird, durch die Spalte-edge - gehen aus dem Fenster, die Grenzen, nicht der Inhalt der Spalte. So können Sie verwenden Sie diese Parameter, um zu erzwingen, die Spalte breiter zu sein und so die Kraft zu scrollen.Das problem ist aber, dass Sie dann verlieren die automatische Anpassung der Spaltenbreite entsprechend der Breite des Baumes selbst. Haben Sie entweder zu zwingen, es sehr weit zu berücksichtigen (angenommene) Wahrscheinlichkeit Ordner der Tiefe, oder Sie Leben mit Ordner-Namen immer abgeschnitten am rechten Rand der Spalte.
Also Fazit: es ist nur eine Einschränkung der widget selbst. (Zumindest in Bezug auf sein Verhalten, auf meiner Plattform, MS Windows).
width
Eigenschaft entweder eine Standard-oder Breite0
, und legen Sie dannminwidth
auf die Breite, die Sie eigentlich wollen.stretch
muss auch festgelegt werden, umTrue
. Dadurch wird die Spalte zu dehnen über den sichtbaren Bereich, aktivieren Sie die horizontale Bildlaufleiste. Wenn Sie versuchen, die Einstellung nurwidth
werden Sie nur machen Sie das widget größer.thx für diesen tollen Kommentar! Es würde haben mir nie eingefallen, Sie, dass die Einstellung
minwidth
als größer alswidth
wäre eine vernünftige Idee, geschweige denn den trick tun :). In meinem Fall aber war es ein bisschen anders. Ich sticked zu Ihrer Beratung lassenminwidth
werden die gewünschten Spaltenbreiten, und legenstretch
zuTrue
für alle Spalten, aber es gab jede Spalte die gleichewidth
von Wert zusammen, der sich auf den Wunsch Breite von meinem treeview-widget.Ich endlich den Entwurf eines langwierige Frage zu einem bestimmten Szenario der Strukturansicht Fragen, w/ horizontal scrollen. Ist es möglich, dass das widget zu verkleinern zurück nach ausbau, aber in meiner situation nicht schön. Der trick ist, zum aufrufen der internen
TtkResizeWidget()
- Funktion, entweder durch die Generierung des hidden<<ThemeChanged>>
virtuellen event, oder rufen Siegrid_remove()
vor dem ändern der Spaltenbreite, danngrid()
nach (bei Verwendung der grid-geometrie-manager).InformationsquelleAutor JDM
Hier ist, was ich schließlich kam mit eine Anzeige
TreeView
Dateien, die sind faul geladen (Dank diese Antwort), die innerhalb einerPanedWindow
(SplitterWindow in wxPython Bedingungen) zusammen mit einemNotebook
. Die scrollbars werden automatisch angezeigt/ausgeblendet wie nötig, Dank dieses Beispiel.InformationsquelleAutor nmz787
InformationsquelleAutor SiVal