Seite 1 von 1

Canvas: yscrollcommand

Verfasst: Montag 10. April 2006, 15:58
von Hannes-Spz
hi leutz, ....
ich komme hier einfach nicht mehr weiter,
kann mal bitte, bitte jemand 5 min seiner sicherlich kostbaren zeit dazu opfern,
mir zu sagen, wie man mittels einer scrollbar und einem canvas immer in diesem
canvas hoch und herunterscrollen kann??
bei mir schreibe ich mittels canvas.create_text() etwas in das Canvas-Feld, was aber dann überlänge bekommt, aber das Canvas sich trotz
.pack(expand = 1)
nicht erweitert...

Verfasst: Dienstag 11. April 2006, 12:27
von jAN
Hi Hannes!
Damit müsste es funktionieren...

Code: Alles auswählen

from Tkinter import *
root=Tk()
yscrollbar=Scrollbar(root,orient=VERTICAL)
can=Canvas(root,yscrollcommand=yscrollbar.set)
yscrollbar.pack(side=RIGHT,fill=Y)
can.pack(side=LEFT,fill=BOTH,expand=1)
yscrollbar.config(command=can.yview)
root.mainloop()
ich hab es nicht richtig ausprobiert... jedenfalls gibt es rechts ne scrollbar
musst du selbst ausprobieren

mfg JAN

Verfasst: Mittwoch 12. April 2006, 15:20
von Hannes-Spz
danke erstmal, aber das hatte ich auch schon probiert...

die sache kommt genau dann ins stocken, wenn man das script folgendermaßen
erweitert/verändert:

Code: Alles auswählen

from Tkinter import * 
root=Tk() 
yscrollbar=Scrollbar(root,orient=VERTICAL) 
can=Canvas(root,yscrollcommand=yscrollbar.set) 
yscrollbar.pack(side=RIGHT,fill=Y) 
can.pack(side=LEFT,fill=BOTH,expand=1) 
yscrollbar.config(command=can.yview) 
####
for i in range(20):
    can.create_text(20, 15*i, text = str(i))
####
root.mainloop()
die scrollbar zeigt er mir zwar an, aber sie glaubt warscheinlich, dass can nicht
gefüllt ist... ?!

Verfasst: Mittwoch 12. April 2006, 15:45
von Mr_Snede
Hast du schon:
http://www.python-forum.de/post-32841.html#32841
gelesen?

Brauchst du wirklich ein Canvas wenn du Text reinschreiben willst?

cu Sebastian

Re: Canvas: yscrollcommand

Verfasst: Mittwoch 12. April 2006, 19:05
von Michael Schneider
Hannes-Spz hat geschrieben:...
kann mal bitte, bitte jemand 5 min seiner sicherlich kostbaren zeit dazu opfern,
mir zu sagen, wie man mittels einer scrollbar und einem canvas immer in diesem
canvas hoch und herunterscrollen kann??
bei mir schreibe ich mittels canvas.create_text() etwas in das Canvas-Feld, was aber dann überlänge bekommt, aber das Canvas sich trotz
.pack(expand = 1)
nicht erweitert...

Hallo Hannes,

bekommst gern meine Zeit! Expand bringt Dir nur etwas, wenn sich die Größe des Canvas Widgets ändert, nicht die seiner Inhalte. Aber die Lösung ist beeindruckend einfach und heißt: scrollregion :idea:

Ich habe Dir mal eine kurze Demo mit zwei Scrollbalken zusammengezimmert. Dabei habe ich aber den grid-Geometriemanager benutzt, ich finde den irgendwie übersichtlicher. Hier der Code:

Code: Alles auswählen

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)

xscroll = TK.Scrollbar(tk, orient = TK.HORIZONTAL)
xscroll.grid(row = 2, column = 1, sticky = TK.EW)

canvas = TK.Canvas(tk,
                   width = 200,
                   height = 200,                        
                   scrollregion = "0 0 400 400",        ##  Scrollregion im Bereich 0,0 - 400, 400
                   yscrollcommand = yscroll.set,        ##  Canvashoehe an yscroll uebergeben
                   xscrollcommand = xscroll.set)        ##  Canvasbreite an xscroll uebergeben
canvas.grid(row = 1, column = 1)

rect = Canvas.Rectangle(canvas, (40, 40), (280, 380), fill="#9999ff")   ##  um was zu sehen

yscroll.config(command = canvas.yview)                  ##  yscrollwerte an canvas uebergeben
xscroll.config(command = canvas.xview)                  ##  xscrollwerte an canvas uebergeben

tk.mainloop()
Ist ganz einfach. Der Canvas ist eine ideale (unendliche) Fläche. Du brauchst nur festzulegen, welchen Ausschnitt Du sehen möchtest (in meinem Beispiel von 0,0 bis 400,400) und schon funzt das. :D

Ich hoffe das hilft Dir weiter.

Liebe Grüße,
der Michel

Verfasst: Donnerstag 13. April 2006, 19:21
von Hannes-Spz
Michael, du bist ein Gott!!
diese antwort von dir hat gleich 4 weitere "projekte" von mir vereinfacht...

tausend dank!! :D

Verfasst: Sonntag 16. April 2006, 22:17
von Michael Schneider
Hannes-Spz hat geschrieben:Michael, du bist ein Gott!!
Hi Hannes,

auch wenn diese Einstellung eine gute Basis für weitere Gespräche wäre, so muss ich Dir dennoch widersprechen. Ich habe diese option auch erst vor ca. 3 Wochen im genialen Einsteigerwerk "Das Python-Buch" im Abschnitt über Tkinter gelesen.

Grüße,
Michael