135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumfrom Tkinter import * 235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 3b1d867f14965e2369d31a3fcdab5bca34b4d81b4Martin Panter# This example program creates a scrolling canvas, and demonstrates 4b1d867f14965e2369d31a3fcdab5bca34b4d81b4Martin Panter# how to tie scrollbars and canvases 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): 10182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "hi" 1135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 1235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def createWidgets(self): 13182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.question = Label(self, text="Can Find The BLUE Square??????") 14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.question.pack() 1589cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.QUIT = Button(self, text='QUIT', background='red', 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters height=3, command=self.quit) 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.QUIT.pack(side=BOTTOM, fill=BOTH) 19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters spacer = Frame(self, height="0.25i") 20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters spacer.pack(side=BOTTOM) 2135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # notice that the scroll region (20" x 20") is larger than 23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # displayed size of the widget (5" x 5") 24182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw = Canvas(self, width="5i", height="5i", 25182b5aca27d376b08a2904bed42b751496f932f3Tim Peters background="white", 26182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scrollregion=(0, 0, "20i", "20i")) 2735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.scrollX = Scrollbar(self, orient=HORIZONTAL) 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.scrollY = Scrollbar(self, orient=VERTICAL) 3035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # now tie the three together. This is standard boilerplate text 32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw['xscrollcommand'] = self.draw.scrollX.set 33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw['yscrollcommand'] = self.draw.scrollY.set 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.scrollX['command'] = self.draw.xview 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.scrollY['command'] = self.draw.yview 3635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # draw something. Note that the first square 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # is visible, but you need to scroll to see the second one. 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.create_rectangle(0, 0, "3.5i", "3.5i", fill="black") 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.create_rectangle("10i", "10i", "13.5i", "13.5i", fill="blue") 4135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # pack 'em up 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.scrollX.pack(side=BOTTOM, fill=X) 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.scrollY.pack(side=RIGHT, fill=Y) 45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.pack(side=LEFT) 4635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 4735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def scrollCanvasX(self, *args): 49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "scrolling", args 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print self.draw.scrollX.get() 5135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 5235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 5335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def __init__(self, master=None): 54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Frame.__init__(self, master) 55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Pack.config(self) 56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.createWidgets() 5735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 5835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumtest = Test() 5935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 6035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumtest.mainloop() 61