canvas-with-scrollbars.py revision 89cb67bb642ee958d9f095728c99e943e994ca54
135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumfrom Tkinter import *
235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum# This example program creates a scroling canvas, and demonstrates
435820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum# how to tie scrollbars and canvses together. The mechanism
535820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum# is analogus for listboxes and other widgets with
635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum# "xscroll" and "yscroll" configuration options.
735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumclass Test(Frame):
935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum    def printit(self):
1035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	print "hi"
1135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
1235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum    def createWidgets(self):
1389cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.question = Label(self, text="Can Find The BLUE Square??????")
1489cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.question.pack()
1589cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum
1689cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.QUIT = Button(self, text='QUIT', background='red',
1789cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum			   height=3, command=self.quit)
1889cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.QUIT.pack(side=BOTTOM, fill=BOTH)
1989cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	spacer = Frame(self, height="0.25i")
2089cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	spacer.pack(side=BOTTOM)
2135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
2235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	# notice that the scroll region (20" x 20") is larger than
2335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	# displayed size of the widget (5" x 5")
2489cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw = Canvas(self, width="5i", height="5i",
2589cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum			   background="white",
2689cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum			   scrollregion=(0, 0, "20i", "20i"))
2735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
2889cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.scrollX = Scrollbar(self, orient=HORIZONTAL)
2989cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.scrollY = Scrollbar(self, orient=VERTICAL)
3035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
3135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	# now tie the three together. This is standard boilerplate text
32447ae53eab0ae1d0e9856a7145e9f8f7387150e6Guido van Rossum	self.draw['xscrollcommand'] = self.draw.scrollX.set
33447ae53eab0ae1d0e9856a7145e9f8f7387150e6Guido van Rossum	self.draw['yscrollcommand'] = self.draw.scrollY.set
3435820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	self.draw.scrollX['command'] = self.draw.xview
3535820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	self.draw.scrollY['command'] = self.draw.yview
3635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
3735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	# draw something. Note that the first square
3835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	# is visible, but you need to scroll to see the second one.
3989cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.create_rectangle(0, 0, "3.5i", "3.5i", fill="black")
4089cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.create_rectangle("10i", "10i", "13.5i", "13.5i", fill="blue")
4135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
4235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	# pack 'em up
4389cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.scrollX.pack(side=BOTTOM, fill=X)
4489cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.scrollY.pack(side=RIGHT, fill=Y)
4589cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum	self.draw.pack(side=LEFT)
4635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
4735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
4835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum    def scrollCanvasX(self, *args):
4935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	print "scrolling", args
5035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	print self.draw.scrollX.get()
5135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
5235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
5335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum    def __init__(self, master=None):
5435820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	Frame.__init__(self, master)
5535820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	Pack.config(self)
5635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum	self.createWidgets()
5735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
5835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumtest = Test()
5935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum
6035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumtest.mainloop()
61