Problem in Pmw ScrolledCanvas ..........
suresh_vsamy
member30972 at dbforums.com
Tue Jun 10 03:49:25 EDT 2003
Hi,
I am using python/tkinter/Pmw in my application. As a beginer to Pmw,
i executed some demo programs given in "Demos" directory of Pmw. I
could able to understand most of the programs since i am familiar
with tkinter. Still i have some doubts in "ScrolledCanvas". The
problem is setting sroll bar to the center of the canvas after
scalling. I have placed some rectangles, ovals in the canvas and used
"scale" to scall the canvas. After scalling i called
"resizescrollregion()" and tried to place the scroll bar to the
center (Using yview('moveto',...)). But the scroll bars are moving
only one direction. This means, verticalscrollbar is moving "Up" and
horizantalscroll bar is moving "Right". It is not moving to center.
My coding is given below.
title = 'Pmw.ScrolledCanvas demonstration'
# Import Pmw from this directory tree.
import sys
sys.path[:0] = ['../../..']
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,
hull_width = 500,
hull_height = 400,
)
# Create a group widget to contain the scrollmode options.
w = Pmw.Group(parent, tag_text='Scroll mode')
w.pack(side = 'bottom', padx = 5, pady = 5)
hmode = Pmw.OptionMenu(w.interior(),
labelpos = 'w',
label_text = 'Horizontal:',
items = ['none', 'static', 'dynamic'],
command = self.sethscrollmode,
menubutton_width = 8,
)
hmode.pack(side = 'left', padx = 5, pady = 5)
hmode.invoke('dynamic')
vmode = Pmw.OptionMenu(w.interior(),
labelpos = 'w',
label_text = 'Vertical:',
items = ['none', 'static', 'dynamic'],
command = self.setvscrollmode,
menubutton_width = 8,
)
vmode.pack(side = 'left', padx = 5, pady = 5)
vmode.invoke('dynamic')
buttonBox = Pmw.ButtonBox(parent)
buttonBox.pack(side = 'bottom')
buttonBox.add('yview', text = 'Show\nyview', command =
self.showYView)
buttonBox.add('scroll', text = 'Page\ndown', command =
self.pageDown)
buttonBox.add('center', text = 'Center', command =
self.centerPage)
# 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')
self.sc.create_rectangle("10m","10m","20m","20m",fill='blue')
# 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.centerPage()
def sethscrollmode(self, tag):
self.sc.configure(hscrollmode = tag)
def setvscrollmode(self, tag):
self.sc.configure(vscrollmode = tag)
def addcircle(self, event):
x = self.sc.canvasx(event.x)
y = self.sc.canvasy(event.y)
width = 10 + self.random() % 100
height = 10 + self.random() % 100
self.sc.create_oval(
x - width, y - height, x + width, y + height,
fill = self.colours[self.oval_count])
self.oval_count = (self.oval_count + 1) % len(self.colours)
self.sc.resizescrollregion()
#Simple random number generator.
def random(self):
self.rand = (self.rand * 125) % 2796203
return self.rand
def showYView(self):
print self.sc.yview()
def pageDown(self):
self.sc.yview('scroll', 1, 'page')
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')
root.title(title)
exitButton = Tkinter.Button(root, text = 'Exit', command =
root.destroy)
exitButton.pack(side = 'bottom')
widget = Demo(root)
root.mainloop()
How can i place the scroll bar to center of canvas after scalling.
--
Posted via http://dbforums.com
More information about the Python-list
mailing list