Seite 1 von 1

Canvas/Scrollbar

Verfasst: Dienstag 13. Juni 2006, 09:44
von jocsch
Hallo Forum!
Ich habe auf dem üblichen Weg ein Canvas (mit scrollregion) und zwei Scrollbars erzeugt und möchte nun über die .set() - Methode der Scrollbars den sichtbaren Ausschnitt des Canvas bewegen (etwa xScroll.set(0.5, 0.6)). Das Canvas rührt sich allerdings kein Stück, und update/update_idletasks scheinen nicht der richtige Weg zu sein.
(Hintergrund: aus einer Liste der im Canvas gezeichneten Objekte auswählen und die Auswahl sichtbar machen (equivalent zu .see() - methode bei Listen))

Hat da jemand ne Idee ???

schönen Dank im voraus, jocsch

Re: Canvas/Scrollbar

Verfasst: Dienstag 13. Juni 2006, 11:02
von Mr_Snede
jocsch hat geschrieben:Hat da jemand ne Idee ???
Wenn du uns deinen Quellcode zeigst, können wir helfen. Das Problem in deinem Quellcode zu finden ohne ihn zu kennen ist gelinde gesagt schwierig.

cu Sebastian

Verfasst: Dienstag 13. Juni 2006, 12:01
von jocsch
Hallo züruck!
Soviel Quellcode gibts da eigentlich noch nicht. Ich stelle mir aber folgendes vor:

Code: Alles auswählen

def __init__(self):
  #(... übliche Infrastruktur für Canavs mit 2 Scrollbars ...)
  self.linksrechtsScroll = Scrollbar #(...)
  self.einCanvas = Canvas #(... width, height, scrollregion, xscrollcommand = self.linksrechtsScroll.set ...)
  self.linksrechtsScroll.config(command = self.einCanvas.xview)
  #( singemäss für hoch/runter)

def springInDieMitte(self):
  self.linksrechtsScroll.set(0.4, 0.6)
  self.obenuntenScroll.set(0.4,0.6)
Bei Aufruf von self.springInDieMitte() hüpfen die Scrollbars beide brav in die Mitte, aber das assoziierte Canvas rührt und regt sich nicht. Ich hab diese Verhalten zwar schon irgendwo mal dokumentiert gesehen, aber das kann wohl nicht Sinn der Sache sein?
Wer braucht denn hier im Zweifelsfall ein .update[_idletasks)]()? Das Canvas oder die Scrollbars?

Gruss, jocsch

Verfasst: Dienstag 13. Juni 2006, 12:42
von jocsch
Hallo³!
Hat sich erledigt: Direkter Aufruf von

Code: Alles auswählen

self.einCanvas.xview(MOVETO, 0.5)
ist die Lösung!

... und Tschüss!