Lines Matching refs:self
49 def __init__(self, parent, action, current_key_sequences):
58 self['borderwidth'] = 2
59 self['relief'] = 'sunken'
60 self.parent = parent
61 self.action = action
62 self.current_key_sequences = current_key_sequences
63 self.result = ''
64 self.key_string = StringVar(self)
65 self.key_string.set('')
66 # Set self.modifiers, self.modifier_label.
67 self.set_modifiers_for_platform()
68 self.modifier_vars = []
69 for modifier in self.modifiers:
70 variable = StringVar(self)
72 self.modifier_vars.append(variable)
73 self.advanced = False
74 self.create_widgets()
76 def showerror(self, *args, **kwargs):
80 def create_widgets(self):
82 self.frame_keyseq_basic = Frame(self, name='keyseq_basic')
83 self.frame_keyseq_basic.grid(row=0, column=0, sticky='nsew',
85 basic_title = Label(self.frame_keyseq_basic,
86 text=f"New keys for '{self.action}' :")
89 basic_keys = Label(self.frame_keyseq_basic, justify='left',
90 textvariable=self.key_string, relief='groove',
95 self.frame_controls_basic = Frame(self)
96 self.frame_controls_basic.grid(row=1, column=0, sticky='nsew', padx=5)
99 self.modifier_checkbuttons = {}
101 for modifier, variable in zip(self.modifiers, self.modifier_vars):
102 label = self.modifier_label.get(modifier, modifier)
103 check = Checkbutton(self.frame_controls_basic,
104 command=self.build_key_string, text=label,
107 self.modifier_checkbuttons[modifier] = check
111 help_basic = Label(self.frame_controls_basic, justify='left',
121 self.list_keys_final = Listbox(self.frame_controls_basic, width=15,
123 self.list_keys_final.insert('end', *AVAILABLE_KEYS)
124 self.list_keys_final.bind('<ButtonRelease-1>', self.final_key_selected)
125 self.list_keys_final.grid(row=0, column=4, rowspan=4, sticky='ns')
126 scroll_keys_final = Scrollbar(self.frame_controls_basic,
128 command=self.list_keys_final.yview)
129 self.list_keys_final.config(yscrollcommand=scroll_keys_final.set)
131 self.button_clear = Button(self.frame_controls_basic,
133 command=self.clear_key_seq)
134 self.button_clear.grid(row=2, column=0, columnspan=4)
137 self.frame_keyseq_advanced = Frame(self, name='keyseq_advanced')
138 self.frame_keyseq_advanced.grid(row=0, column=0, sticky='nsew',
140 advanced_title = Label(self.frame_keyseq_advanced, justify='left',
141 text=f"Enter new binding(s) for '{self.action}' :\n" +
144 self.advanced_keys = Entry(self.frame_keyseq_advanced,
145 textvariable=self.key_string)
146 self.advanced_keys.pack(fill='x')
149 self.frame_help_advanced = Frame(self)
150 self.frame_help_advanced.grid(row=1, column=0, sticky='nsew', padx=5)
151 help_advanced = Label(self.frame_help_advanced, justify='left',
164 self.button_level = Button(self, command=self.toggle_level,
166 self.button_level.grid(row=2, column=0, stick='ew', padx=5, pady=5)
167 self.toggle_level()
169 def set_modifiers_for_platform(self):
178 self.modifiers = ['Shift', 'Control', 'Option', 'Command']
180 self.modifiers = ['Control', 'Alt', 'Shift']
181 self.modifier_label = {'Control': 'Ctrl'} # Short name.
183 def toggle_level(self):
185 if self.button_level.cget('text').startswith('Advanced'):
186 self.clear_key_seq()
187 self.button_level.config(text='<< Basic Key Binding Entry')
188 self.frame_keyseq_advanced.lift()
189 self.frame_help_advanced.lift()
190 self.advanced_keys.focus_set()
191 self.advanced = True
193 self.clear_key_seq()
194 self.button_level.config(text='Advanced Key Binding Entry >>')
195 self.frame_keyseq_basic.lift()
196 self.frame_controls_basic.lift()
197 self.advanced = False
199 def final_key_selected(self, event=None):
201 self.build_key_string()
203 def build_key_string(self):
205 keylist = modifiers = self.get_modifiers()
206 final_key = self.list_keys_final.get('anchor')
210 self.key_string.set(f"<{'-'.join(keylist)}>")
212 def get_modifiers(self):
214 mod_list = [variable.get() for variable in self.modifier_vars]
217 def clear_key_seq(self):
219 self.list_keys_final.select_clear(0, 'end')
220 self.list_keys_final.yview('moveto', '0.0')
221 for variable in self.modifier_vars:
223 self.key_string.set('')
225 def ok(self):
226 self.result = ''
227 keys = self.key_string.get().strip()
229 self.showerror(title=self.keyerror_title, parent=self,
232 if (self.advanced or self.keys_ok(keys)) and self.bind_ok(keys):
233 self.result = keys
236 def keys_ok(self, keys):
242 final_key = self.list_keys_final.get('anchor')
243 modifiers = self.get_modifiers()
244 title = self.keyerror_title
245 key_sequences = [key for keylist in self.current_key_sequences
248 self.showerror(title, parent=self,
252 self.showerror(title=title, parent=self,
259 self.showerror(title=title, parent=self, message=msg)
262 self.showerror(title=title, parent=self, message=msg)
267 def bind_ok(self, keys):
270 binding = self.bind(keys, lambda: None)
272 self.showerror(
273 title=self.keyerror_title, parent=self,
278 self.unbind(keys, binding)
284 def __init__(self, parent, title, action, current_key_sequences,
297 self.withdraw() # Hide while setting geometry.
298 self['borderwidth'] = 5
299 self.resizable(height=False, width=False)
301 self.update_idletasks()
304 (parent.winfo_width()//2 - self.winfo_reqwidth()//2))
306 ((parent.winfo_height()//2 - self.winfo_reqheight()//2)
308 self.geometry(f"+{x}+{y}")
310 self.title(title)
311 self.frame = frame = GetKeysFrame(self, action, current_key_sequences)
312 self.protocol("WM_DELETE_WINDOW", self.cancel)
313 frame_buttons = Frame(self)
314 self.button_ok = Button(frame_buttons, text='OK',
315 width=8, command=self.ok)
316 self.button_cancel = Button(frame_buttons, text='Cancel',
317 width=8, command=self.cancel)
318 self.button_ok.grid(row=0, column=0, padx=5, pady=5)
319 self.button_cancel.grid(row=0, column=1, padx=5, pady=5)
323 self.transient(parent)
324 _setup_dialog(self)
325 self.grab_set()
327 self.deiconify() # Geometry set, unhide.
328 self.wait_window()
331 def result(self):
332 return self.frame.result
335 def result(self, value):
336 self.frame.result = value
338 def ok(self, event=None):
339 self.frame.ok()
340 self.grab_release()
341 self.destroy()
343 def cancel(self, event=None):
344 self.result = ''
345 self.grab_release()
346 self.destroy()