[Tutor] Partially solved Pmw.ScrolledCanvas issues.....
Suresh Kumar
Suresh Kumar" <suresh_vsamy@rediffmail.com
Tue Jun 10 08:24:33 2003
Hi,
This is the updated version of my previous query which has the
subject "Pmw ScrolledCanvas Issues". Iam using Pmw
"ScrolledCanvas" in my application and want to place the scroll
bars to center of the canvas after scalling (using "scale"). As
per the guidelines given by "Abel Daniel" i used
"update_idletasks()" to place the scrollbars to canvas center
after scalling. It is working fine in all aspect except iam
getting some flickering since "scale" places canvas objects in one
place and subsequent "update_idletasks()" call moves the objects
to the desired location.
My code is given below:
import Tkinter
import Pmw
class Demo:
def __init__(self, parent):
# Create the ScrolledCanvas.
self.sc = Pmw.ScrolledCanvas(parent,
borderframe = 1,
labelpos = 'n',
label_text = 'ScrolledCanvas',
usehullsize = 1,
hscrollmode = 'dynamic', #'static', #
vscrollmode = 'dynamic',
hull_width = 1500,
hull_height = 1400,
)
# Pack this last so that the buttons do not get shrunk when
# the window is resized.
self.sc.pack(padx = 5, pady = 5, fill = 'both', expand = 1)
self.sc.component('canvas').bind('<1>', self.addcircle)
self.sc.component('canvas').bind('<2>', self.scalecanvas)
self.sc.component('canvas').bind('<3>', self.zoomout)
testEntry = Tkinter.Entry(parent)
self.sc.create_line(20, 20, 100, 100)
self.sc.create_oval(100, 100, 200, 200, fill = 'green',tag =
'oval')
# Set the scroll region of the canvas to include all the
items
# just created.
self.sc.resizescrollregion()
self.colours = ('red', 'green', 'blue', 'yellow',
'cyan',
'magenta','black', 'white')
self.oval_count = 0
self.rand = 12345
def zoomout(self,event):
self.sc.scale('all',0,0,0.5,0.5)
self.sc.resizescrollregion()
def scalecanvas(self,event):
self.sc.scale('all',0,0,2,2)
self.sc.resizescrollregion()
self.sc.update_idletasks()
self.centerPage()
def centerPage(self):
top, bottom = self.sc.yview()
size = bottom - top
middle = 0.5 - size / 2
self.sc.yview('moveto', middle)
left,right = self.sc.xview()
size = right - left
middle = 0.5 - size / 2
self.sc.xview('moveto', middle)
######################################################################
# Create demo in root window for testing.
if __name__ == '__main__':
root = Tkinter.Tk()
Pmw.initialise(root, fontScheme = 'pmw1')
exitButton = Tkinter.Button(root, text = 'Exit', command =
root.destroy)
exitButton.pack(side = 'bottom')
widget = Demo(root)
root.mainloop()
How can i stop flickering or "double movement" to avoid
flickering?
With Regard
V.Suresh Kumar
___________________________________________________
Get email that means BUSINESS! me @ mycompany.com.
Just Rs.1499/year.
To start, click http://www.rediffmailpro.com