Untitled
unknown
plain_text
5 months ago
4.5 kB
3
Indexable
class TouchKeyboard(ctk.CTkFrame): def __init__(self, master, target_entry, **kwargs): super().__init__(master, **kwargs) self.target_entry = target_entry self.shift_mode = False self.special_mode = False # Layout settings self.rowconfigure((0,1,2,3,4), weight=1) for i in range(12): self.columnconfigure(i, weight=1) self.create_keyboard() def create_keyboard(self): # Define keyboard layouts layouts = { 'normal': [ ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'ß', '⌫'], ['q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'], ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#'], ['⇧', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '123'], ['Space', '←', '→', 'Hide'] ], 'shift': [ ['!', '"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '⌫'], ['Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', "'"], ['⇧', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '123'], ['Space', '←', '→', 'Hide'] ], 'special': [ ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '°', '⌫'], ['@', '#', '€', '~', '[', ']', '{', '}', '\\', '|', '´', '+'], ['!', '"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '^'], ['abc', '<', '>', '€', '£', '¥', '`', '´', '*', '+', '-', '='], ['Space', '←', '→', 'Hide'] ] } self.current_layout = 'normal' self.layouts = layouts self.draw_layout() def draw_layout(self): # Clear existing buttons for widget in self.winfo_children(): widget.destroy() current_keys = self.layouts[self.current_layout] # Create buttons for current layout for row_idx, row in enumerate(current_keys): for col_idx, key in enumerate(row): # Determine button width colspan = 1 if key == 'Space': colspan = 6 elif key == 'Hide': colspan = 3 elif key in ['←', '→']: colspan = 1 # Changed from 1.5 to 1 btn = ctk.CTkButton( self, text=key, height=50, command=lambda k=key: self.key_press(k), font=("Arial", 18) ) # Adjust button placement for navigation keys if key == '←': btn.grid(row=row_idx, column=col_idx + 6, padx=2, pady=2, sticky="nsew") elif key == '→': btn.grid(row=row_idx, column=col_idx + 7, padx=2, pady=2, sticky="nsew") else: btn.grid(row=row_idx, column=col_idx, columnspan=colspan, padx=2, pady=2, sticky="nsew") def key_press(self, key): if key == '⌫': current_text = self.target_entry.get() self.target_entry.delete(0, "end") self.target_entry.insert(0, current_text[:-1]) elif key == 'Space': self.target_entry.insert("end", " ") elif key == '←': current_pos = self.target_entry.index("insert") if current_pos > 0: self.target_entry.icursor(current_pos - 1) elif key == '→': current_pos = self.target_entry.index("insert") self.target_entry.icursor(current_pos + 1) elif key == '⇧': self.current_layout = 'normal' if self.current_layout == 'shift' else 'shift' self.draw_layout() elif key == '123': self.current_layout = 'special' self.draw_layout() elif key == 'abc': self.current_layout = 'normal' self.draw_layout() elif key == 'Hide': self.master.toggle_keyboard(force_hide=True) else: self.target_entry.insert("end", key)
Editor is loading...
Leave a Comment