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