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