ยปCore Development>Code coverage>Lib/idlelib/ScrolledList.py

Python code coverage for Lib/idlelib/ScrolledList.py

#countcontent
1n/afrom tkinter import *
2n/a
3n/aclass ScrolledList:
4n/a
5n/a default = "(None)"
6n/a
7n/a def __init__(self, master, **options):
8n/a # Create top frame, with scrollbar and listbox
9n/a self.master = master
10n/a self.frame = frame = Frame(master)
11n/a self.frame.pack(fill="both", expand=1)
12n/a self.vbar = vbar = Scrollbar(frame, name="vbar")
13n/a self.vbar.pack(side="right", fill="y")
14n/a self.listbox = listbox = Listbox(frame, exportselection=0,
15n/a background="white")
16n/a if options:
17n/a listbox.configure(options)
18n/a listbox.pack(expand=1, fill="both")
19n/a # Tie listbox and scrollbar together
20n/a vbar["command"] = listbox.yview
21n/a listbox["yscrollcommand"] = vbar.set
22n/a # Bind events to the list box
23n/a listbox.bind("<ButtonRelease-1>", self.click_event)
24n/a listbox.bind("<Double-ButtonRelease-1>", self.double_click_event)
25n/a listbox.bind("<ButtonPress-3>", self.popup_event)
26n/a listbox.bind("<Key-Up>", self.up_event)
27n/a listbox.bind("<Key-Down>", self.down_event)
28n/a # Mark as empty
29n/a self.clear()
30n/a
31n/a def close(self):
32n/a self.frame.destroy()
33n/a
34n/a def clear(self):
35n/a self.listbox.delete(0, "end")
36n/a self.empty = 1
37n/a self.listbox.insert("end", self.default)
38n/a
39n/a def append(self, item):
40n/a if self.empty:
41n/a self.listbox.delete(0, "end")
42n/a self.empty = 0
43n/a self.listbox.insert("end", str(item))
44n/a
45n/a def get(self, index):
46n/a return self.listbox.get(index)
47n/a
48n/a def click_event(self, event):
49n/a self.listbox.activate("@%d,%d" % (event.x, event.y))
50n/a index = self.listbox.index("active")
51n/a self.select(index)
52n/a self.on_select(index)
53n/a return "break"
54n/a
55n/a def double_click_event(self, event):
56n/a index = self.listbox.index("active")
57n/a self.select(index)
58n/a self.on_double(index)
59n/a return "break"
60n/a
61n/a menu = None
62n/a
63n/a def popup_event(self, event):
64n/a if not self.menu:
65n/a self.make_menu()
66n/a menu = self.menu
67n/a self.listbox.activate("@%d,%d" % (event.x, event.y))
68n/a index = self.listbox.index("active")
69n/a self.select(index)
70n/a menu.tk_popup(event.x_root, event.y_root)
71n/a
72n/a def make_menu(self):
73n/a menu = Menu(self.listbox, tearoff=0)
74n/a self.menu = menu
75n/a self.fill_menu()
76n/a
77n/a def up_event(self, event):
78n/a index = self.listbox.index("active")
79n/a if self.listbox.selection_includes(index):
80n/a index = index - 1
81n/a else:
82n/a index = self.listbox.size() - 1
83n/a if index < 0:
84n/a self.listbox.bell()
85n/a else:
86n/a self.select(index)
87n/a self.on_select(index)
88n/a return "break"
89n/a
90n/a def down_event(self, event):
91n/a index = self.listbox.index("active")
92n/a if self.listbox.selection_includes(index):
93n/a index = index + 1
94n/a else:
95n/a index = 0
96n/a if index >= self.listbox.size():
97n/a self.listbox.bell()
98n/a else:
99n/a self.select(index)
100n/a self.on_select(index)
101n/a return "break"
102n/a
103n/a def select(self, index):
104n/a self.listbox.focus_set()
105n/a self.listbox.activate(index)
106n/a self.listbox.selection_clear(0, "end")
107n/a self.listbox.selection_set(index)
108n/a self.listbox.see(index)
109n/a
110n/a # Methods to override for specific actions
111n/a
112n/a def fill_menu(self):
113n/a pass
114n/a
115n/a def on_select(self, index):
116n/a pass
117n/a
118n/a def on_double(self, index):
119n/a pass
120n/a
121n/a
122n/adef test():
123n/a root = Tk()
124n/a root.protocol("WM_DELETE_WINDOW", root.destroy)
125n/a class MyScrolledList(ScrolledList):
126n/a def fill_menu(self): self.menu.add_command(label="pass")
127n/a def on_select(self, index): print("select", self.get(index))
128n/a def on_double(self, index): print("double", self.get(index))
129n/a s = MyScrolledList(root)
130n/a for i in range(30):
131n/a s.append("item %02d" % i)
132n/a return root
133n/a
134n/adef main():
135n/a root = test()
136n/a root.mainloop()
137n/a
138n/aif __name__ == '__main__':
139n/a main()