/
sc_p
/
EnergoAI
Обзор
Документация
Войти
/
sc_p
/
EnergoAI
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
ui/base_text_input.py
80 строк
2 KB
Павел Щёголев
Загрузить файлы в «»
12 мар 2026, 04:54
Верифицирован
12 мар 2026, 04:54
628f0d6
Код
Авторство
О чём код?
import tkinter as tk def attach_text_input_behaviour(widget: tk.Widget, root: tk.Tk): menu = tk.Menu(root, tearoff=0) menu.add_command(label="Вставить", command=lambda: _paste(widget)) menu.add_command(label="Копировать", command=lambda: _copy(widget)) menu.add_command(label="Вырезать", command=lambda: _cut(widget)) menu.add_separator() menu.add_command(label="Выделить всё", command=lambda: _select_all(widget)) def show_menu(event): widget.focus_set() menu.tk_popup(event.x_root, event.y_root) def on_ctrl(event): if not (event.state & 0x4): return c = event.char.lower() if c in ('v', 'м', '\x16'): _paste(widget); return "break" if c in ('c', 'с', '\x03'): _copy(widget); return "break" if c in ('x', 'ч', '\x18'): _cut(widget); return "break" if c in ('a', 'ф', '\x01'): _select_all(widget); return "break" widget.bind("<Button-3>", show_menu) widget.bind("<Control-Key>", on_ctrl) def _paste(w): try: text = w.clipboard_get() if isinstance(w, tk.Entry): # Entry if w.selection_present(): w.delete(0, tk.END) w.insert(0, text) w.icursor(tk.END) else: # Text if w.tag_ranges("sel"): w.delete("1.0", "end") w.insert("1.0", text) w.mark_set(tk.INSERT, "end") except Exception: pass def _copy(w): try: text = w.selection_get() w.clipboard_clear() w.clipboard_append(text) except: pass def _cut(w): try: text = w.selection_get() w.clipboard_clear() w.clipboard_append(text) if isinstance(w, tk.Entry): w.delete(tk.SEL_FIRST, tk.SEL_LAST) else: w.delete("sel.first", "sel.last") except: pass def _select_all(w): if isinstance(w, tk.Entry): w.selection_range(0, tk.END) w.icursor(tk.END) else: w.tag_add("sel", "1.0", "end") w.mark_set(tk.INSERT, "end")