annotate Lib/idlelib/ScrolledList.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents b53604fad54b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
1 from Tkinter import *
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 class ScrolledList:
18564
aa34436145d0 py-cvs-rel2_1 (rev 1.5) merge - whitespace normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
4
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5 default = "(None)"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
6
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7 def __init__(self, master, **options):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
8 # Create top frame, with scrollbar and listbox
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
9 self.master = master
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
10 self.frame = frame = Frame(master)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
11 self.frame.pack(fill="both", expand=1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
12 self.vbar = vbar = Scrollbar(frame, name="vbar")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
13 self.vbar.pack(side="right", fill="y")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
14 self.listbox = listbox = Listbox(frame, exportselection=0,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
15 background="white")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
16 if options:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
17 listbox.configure(options)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18 listbox.pack(expand=1, fill="both")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19 # Tie listbox and scrollbar together
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
20 vbar["command"] = listbox.yview
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21 listbox["yscrollcommand"] = vbar.set
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22 # Bind events to the list box
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23 listbox.bind("<ButtonRelease-1>", self.click_event)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24 listbox.bind("<Double-ButtonRelease-1>", self.double_click_event)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25 listbox.bind("<ButtonPress-3>", self.popup_event)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26 listbox.bind("<Key-Up>", self.up_event)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27 listbox.bind("<Key-Down>", self.down_event)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 # Mark as empty
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
29 self.clear()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
30
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 def close(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 self.frame.destroy()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34 def clear(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35 self.listbox.delete(0, "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
36 self.empty = 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
37 self.listbox.insert("end", self.default)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
38
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
39 def append(self, item):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
40 if self.empty:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
41 self.listbox.delete(0, "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
42 self.empty = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
43 self.listbox.insert("end", str(item))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
45 def get(self, index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
46 return self.listbox.get(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
47
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48 def click_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49 self.listbox.activate("@%d,%d" % (event.x, event.y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 index = self.listbox.index("active")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 self.select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52 self.on_select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55 def double_click_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56 index = self.listbox.index("active")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 self.select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58 self.on_double(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61 menu = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
63 def popup_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64 if not self.menu:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 self.make_menu()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 menu = self.menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 self.listbox.activate("@%d,%d" % (event.x, event.y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68 index = self.listbox.index("active")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 self.select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70 menu.tk_popup(event.x_root, event.y_root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72 def make_menu(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
73 menu = Menu(self.listbox, tearoff=0)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74 self.menu = menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 self.fill_menu()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 def up_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 index = self.listbox.index("active")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79 if self.listbox.selection_includes(index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 index = index - 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 index = self.listbox.size() - 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 if index < 0:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 self.listbox.bell()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 self.select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 self.on_select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 def down_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
91 index = self.listbox.index("active")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
92 if self.listbox.selection_includes(index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 index = index + 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
94 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
95 index = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
96 if index >= self.listbox.size():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
97 self.listbox.bell()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
98 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
99 self.select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
100 self.on_select(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
101 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
102
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
103 def select(self, index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
104 self.listbox.focus_set()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
105 self.listbox.activate(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
106 self.listbox.selection_clear(0, "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
107 self.listbox.selection_set(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
108 self.listbox.see(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
109
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
110 # Methods to override for specific actions
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
111
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
112 def fill_menu(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
113 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
114
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
115 def on_select(self, index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
116 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
117
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
118 def on_double(self, index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
119 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
120
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
121
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
122 def test():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
123 root = Tk()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
124 root.protocol("WM_DELETE_WINDOW", root.destroy)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
125 class MyScrolledList(ScrolledList):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
126 def fill_menu(self): self.menu.add_command(label="pass")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
127 def on_select(self, index): print "select", self.get(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
128 def on_double(self, index): print "double", self.get(index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
129 s = MyScrolledList(root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
130 for i in range(30):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
131 s.append("item %02d" % i)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
132 return root
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
133
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
134 def main():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
135 root = test()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
136 root.mainloop()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
137
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
138 if __name__ == '__main__':
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
139 main()