Seite 1 von 1
horizontale Scrollbar für Treeview
Verfasst: Sonntag 4. September 2022, 18:53
von Fire Spike
Hallo Leute
Ich habe eine Treeview mit einer Spalte. Der Benutzer kann dann neue Zeilen einfügen.
Damit lange Einträge angezeigt werden können möchte ich eine horizontale Scrollbar.
Sie funktioniert aber leider nicht richtig.
Ich möchte eine maximale Breite:
Wenn ich jetzt ein neuer zu langer Text einfüge wir er aber einfach nur abgeschnitten.
Was könnte das Problem sein?
Danke im Voraus
Re: horizontale Scrollbar für Treeview
Verfasst: Sonntag 4. September 2022, 20:17
von sparrow
Ich empfehle ein minimales, ausführbares Beispiel, das dein Problem zeigt. Nicht nur eine Zeile Code.
Re: horizontale Scrollbar für Treeview
Verfasst: Sonntag 4. September 2022, 20:29
von Fire Spike
Ich erstelle die Scrollbars so:
Code: Alles auswählen
self.scrollbar_vertical = ttk.Scrollbar(self, orient="vertical", command=self.hierarchical_view.yview)
self.scrollbar_vertical.grid(row=0, column=1, sticky="nsew")
self.scrollbar_horizontal = ttk.Scrollbar(self, orient="horizontal", command=self.hierarchical_view.xview)
self.scrollbar_horizontal.grid(row=1, column=0, sticky="nsew")
self.hierarchical_view.configure(yscrollcommand=self.scrollbar_vertical.set, xscrollcommand=self.scrollbar_horizontal.set)
Die Zeilen füge ich mit treeview.insert ein.
Re: horizontale Scrollbar für Treeview
Verfasst: Sonntag 4. September 2022, 20:53
von sparrow
Soll ich meinen vorherigen Post wiederholen und aus "eine Zeile Code" "fünf Zeilen Code" machen?
Ich freue mich über deinen Optimismus, dass zufällig jemand vorbei kommt, der genau deine Frage beantworten kann. Aber die Wahrscheinlichkeit würde wohl steigen, wenn du ein minimales, lauffähiges Beispiel zeigen würdest. Zumindst ich bin nicht bereit, ein Programm um deine 5 Zeilen Code zu bauen, das es mir ermöglicht, das zu testen.
Demnach: Viel Glück!
Re: horizontale Scrollbar für Treeview
Verfasst: Dienstag 6. September 2022, 19:54
von Fire Spike
@sparrow
Also. Hier mal ein vollständiges, lauffähiges Beispiel, das mein Problem demonstriert:
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
def main():
root = tk.Tk()
treeview = ttk.Treeview(root)
treeview.config(show="tree", height=38)
treeview.column("#0", width=250)
treeview.grid(row=0, column=0, sticky="nsew")
scrollbar_vertical = ttk.Scrollbar(root, orient="vertical", command=treeview.yview)
scrollbar_vertical.grid(row=0, column=1, sticky="nsew")
scrollbar_horizontal = ttk.Scrollbar(root, orient="horizontal", command=treeview.xview)
scrollbar_horizontal.grid(row=1, column=0, sticky="nsew")
treeview.configure(yscrollcommand=scrollbar_vertical.set, xscrollcommand=scrollbar_horizontal.set)
for _ in range(50):
treeview.insert(parent="", index="end", text="ggggggggggggggggggggggggggggggggggggggggggggggggg")
root.mainloop()
if __name__ == "__main__":
main()
Wie man sehen kann funktioniert nur die vertikale Scrollbar.
Wie bringe ich die Horizontale auch zum laufen?
Re: horizontale Scrollbar für Treeview
Verfasst: Mittwoch 7. September 2022, 13:59
von peterpy
Hallo Fire Spike,
ich denke nicht, dass es möglich ist eine Spalte in Treeview horizontal zu scrollen.
Warum nimmst Du nicht eine Listbox?
Code: Alles auswählen
import tkinter as tk
def main():
root = tk.Tk()
listbox = tk.Listbox(root, width=20, height=50)
listbox.grid(row=0, column=0, sticky="nsew")
scrollbar_vertical = tk.Scrollbar(root, orient="vertical",
command=listbox.yview)
scrollbar_vertical.grid(row=0, column=1, sticky="ns")
scrollbar_horizontal = tk.Scrollbar(root, orient="horizontal",
command=listbox.xview)
scrollbar_horizontal.grid(row=1, column=0, sticky="we")
listbox.configure(yscrollcommand=scrollbar_vertical.set)
listbox.configure(xscrollcommand=scrollbar_horizontal.set)
for i in range(100):
zeilentext = 20*(f'{i} ')
listbox.insert('end', zeilentext)
root.mainloop()
if __name__ == "__main__":
main()
Gruss Peter
Re: horizontale Scrollbar für Treeview
Verfasst: Mittwoch 7. September 2022, 14:28
von Fire Spike
Ich brauche die Funktion um Elemente unterordnen zu können. Und das geht soweit ich weiss nur mit der TreeView.
Aber vielen Dank für deine Antwort.
Vielleicht kennst du ja noch eine andere Option.
Re: horizontale Scrollbar für Treeview
Verfasst: Mittwoch 7. September 2022, 15:10
von peterpy
Hallo Fire Spike,
Fire Spike hat geschrieben: Sonntag 4. September 2022, 18:53
Ich habe eine Treeview mit einer Spalte.
Fire Spike hat geschrieben: Mittwoch 7. September 2022, 14:28
Ich brauche die Funktion um Elemente unterordnen zu können.
Und was bedeutet unterordnen?
Willst Du mehrere Spalten? Du hast aber in deinem Treeview nur eine.
Wenn es mehrere Spalten braucht, dann setz doch mehrere Listboxen nebeneinander.
Gruss Peter
Re: horizontale Scrollbar für Treeview
Verfasst: Mittwoch 7. September 2022, 16:05
von Fire Spike
Re: horizontale Scrollbar für Treeview
Verfasst: Mittwoch 7. September 2022, 19:58
von Sirius3
Wenn tkinter Konstanten definiert hat, sollte man die auch verwenden.
Dein Grid reagiert noch nicht auf Änderung der Fenstergröße. Dazu muß man es passend konfiguriert werden.
Eine Treeview-Spalte ändert ihre Breite dynamisch, je nachdem, wie breit das Widget ist, will man also eine Horizontale Scrollbar, muß man das explizit ausschalten.
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
def main():
root = tk.Tk()
treeview = ttk.Treeview(root)
treeview.column("#0", stretch=False, width=500)
treeview.config(show="tree")
treeview.grid(row=0, column=0, sticky=tk.NSEW)
scrollbar_vertical = ttk.Scrollbar(root, orient=tk.VERTICAL, command=treeview.yview)
scrollbar_vertical.grid(row=0, column=1, sticky=tk.NS)
scrollbar_horizontal = ttk.Scrollbar(root, orient=tk.HORIZONTAL, command=treeview.xview)
scrollbar_horizontal.grid(row=1, column=0, sticky=tk.EW)
treeview.configure(yscrollcommand=scrollbar_vertical.set, xscrollcommand=scrollbar_horizontal.set)
for _ in range(50):
treeview.insert(parent="", index="end", text=f"{_}"*50)
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.geometry('200x200')
root.mainloop()
if __name__ == "__main__";
main()
Re: horizontale Scrollbar für Treeview
Verfasst: Donnerstag 8. September 2022, 16:38
von Fire Spike
Danke für deine Mühen. Der Code hat aber leider noch ein Problem.
Das Fenster sollte eine feste Grösse haben. Die Treeview auch. Alles was dann nicht angezeigt werden kann, weil es zu lange ist sollte man scrollen können.
Wenn ich bei dir also einen Text mit der Länge 200 reinmache, kann ich einen Teil immer noch sehen. Sonst müsste ich die "width" ja höher einstellen.
Re: horizontale Scrollbar für Treeview
Verfasst: Donnerstag 8. September 2022, 16:48
von sparrow
Wenn du mit festen Fenstergrößen arbeitest, machst du etwas falsch. Wahrscheinlich auch, wenn du mit festen Elementgrößen arbeitest. Wie "groß" etwas dargestellt wird, hängt von verschiedenen Faktoren des Systems ab. Nur weil das bei dir von der Größe passt, muss das auf einem anderen System nicht identisch sein.
Re: horizontale Scrollbar für Treeview
Verfasst: Donnerstag 8. September 2022, 17:25
von Fire Spike
Aber auch wenn ich mit dynamischen Grössen arbeite muss ich "width" manuell anpassen.