Untitled

 avatar
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