Hallo The Spirit
Um keine Verwirrung zu stiften:
Tkinker-Widgets:
Frame,
Canvas,
Button
usw.
Canvas-Objekte:
Werden erzeugt mit den Tkinter Canvas-Widget zugehörigen Methoden:
create_rectangle,
create_line,
create_oval,
create_text,
create_window
usw.
Canvas-Objekte die du auf einer scrollbaren Canvas platziert hast verschieben sich beim betätigen der Scrollbar.
Tkinter Widgets, welche du direkt auf der scrollbaren Canvas platzierst verschieben sich nicht beim betätigen der Scrollbar.
Möchtest du auf der scrollbaren Canvas platzier Tkinter-Widgets mit der Scrollbar verschieben musst du diese in ein Canvas-Window-Objekt einbetten.
Hier nochmals das leicht abgeänderte Code-Snippet mit:
a) Die Objekte 'Button-1' und 'Canvas-1' sind direkt auf der scrollbaren Canvas platziert und verschieben sich nicht mit dem betätigen der Scrollbar.
b) Die Objekte 'Button-2' und 'Canvas-2' sind in ein Canvas-Window-Objekt eingebettet und verschieben sich beim betätigen der Scrollbar.
Code: Alles auswählen
# Skriptname canvas_scroll_01_02.py (wuf)
import Tkinter as tk
#[Anfang] fenster generieren
hf=tk.Tk()
hf.geometry('700x300')
hf.title('Auswertung')
scrollbar = tk.Scrollbar(hf)
scrollbar.pack(side = tk.RIGHT, fill = tk.Y)
canvas = tk.Canvas(hf, width=1000,height=300, scrollregion=(0, 0, 1000, 1000), yscrollcommand=scrollbar.set)
canvas.pack(side = tk.LEFT, fill = tk.Y)
graphic_object = canvas.create_rectangle(10, 10, 100, 100)
button_1 = tk.Button(canvas, text='Button-1')
button_1.place(x=150, y=10)
button_2 = tk.Button(None, text='Button-2')
button_2.place()
#~~ Grafik-Behaelter fuer 'button_2'
button_container = canvas.create_window(250, 10, anchor='nw', window=button_2)
canvas_1 = tk.Canvas(canvas, bg='green', width=80, height=20)
canvas_1.place(x=150, y=80)
canvas_1.create_text(5, 3, text='Canvas-1', anchor='nw')
canvas_2 = tk.Canvas(None, bg='green', width=80, height=20)
canvas_2.pack()
canvas_2.create_text(5, 3, text='Canvas-2', anchor='nw')
#~~ Grafik-Behaelter fuer 'canvas_2'
canvas_container = canvas.create_window(250, 80, anchor='nw', window=canvas_2)
scrollbar.config(command=canvas.yview)
hf.mainloop()
#[Ende] fenster generieren
Gruss wuf