Disable TFTP server functionality and add global copy-paste keybindings

- Comment out TFTP server-related code and imports
- Remove TFTP server tab from the application
- Add global copy, paste, and cut keybindings for Text and Entry widgets
- Remove Firmware directory creation
This commit is contained in:
2025-02-14 03:25:22 +03:00
parent 029371fa68
commit 1ffda28b09
2 changed files with 67 additions and 58 deletions

3
.gitignore vendored
View File

@@ -4,3 +4,6 @@ Configs/Eltex MES2424 AC - Сеть FTTB 2G, доп.txt
Configs/конфиг доп 3750-52 с айпи 172.17.141.133 .txt Configs/конфиг доп 3750-52 с айпи 172.17.141.133 .txt
DALL·E 2024-12-29 01.01.02 - Square vector logo_ A clean and minimalistic app icon for serial port management software. The design prominently features a simplified rectangular CO.ico DALL·E 2024-12-29 01.01.02 - Square vector logo_ A clean and minimalistic app icon for serial port management software. The design prominently features a simplified rectangular CO.ico
test.py test.py
__pycache__/TFTPServer.cpython-312.pyc
Firmware/1.jpg
Firmware/2

View File

@@ -43,13 +43,13 @@ from tkinter import ttk
import serial import serial
import serial.tools.list_ports import serial.tools.list_ports
from serial.serialutil import SerialException from serial.serialutil import SerialException
from TFTPServer import TFTPServerThread # from TFTPServer import TFTPServerThread
# Создаем необходимые папки # Создаем необходимые папки
os.makedirs("Logs", exist_ok=True) os.makedirs("Logs", exist_ok=True)
os.makedirs("Configs", exist_ok=True) os.makedirs("Configs", exist_ok=True)
os.makedirs("Settings", exist_ok=True) os.makedirs("Settings", exist_ok=True)
os.makedirs("Firmware", exist_ok=True) # os.makedirs("Firmware", exist_ok=True)
# Файл настроек находится в папке Settings # Файл настроек находится в папке Settings
SETTINGS_FILE = os.path.join("Settings", "settings.json") SETTINGS_FILE = os.path.join("Settings", "settings.json")
@@ -423,7 +423,16 @@ class SerialAppGUI(tk.Tk):
self.option_add("*Font", default_font) self.option_add("*Font", default_font)
self.settings = settings self.settings = settings
self.connection = None self.connection = None
self.tftp_thread = None # self.tftp_thread = None # TFTP сервер отключен
# Глобальные биндинги для копирования, вставки и вырезания
self.bind_class("Text", "<Control-c>", lambda event: event.widget.event_generate("<<Copy>>"))
self.bind_class("Text", "<Control-v>", lambda event: event.widget.event_generate("<<Paste>>"))
self.bind_class("Text", "<Control-x>", lambda event: event.widget.event_generate("<<Cut>>"))
self.bind_class("Entry", "<Control-c>", lambda event: event.widget.event_generate("<<Copy>>"))
self.bind_class("Entry", "<Control-v>", lambda event: event.widget.event_generate("<<Paste>>"))
self.bind_class("Entry", "<Control-x>", lambda event: event.widget.event_generate("<<Cut>>"))
self.create_menu() self.create_menu()
self.create_tabs() self.create_tabs()
@@ -458,10 +467,10 @@ class SerialAppGUI(tk.Tk):
notebook.add(self.config_editor_frame, text="Редактор конфигурационного файла") notebook.add(self.config_editor_frame, text="Редактор конфигурационного файла")
self.create_config_editor_tab(self.config_editor_frame) self.create_config_editor_tab(self.config_editor_frame)
# Вкладка "TFTP Сервер" # # Вкладка "TFTP Сервер" (отключено)
self.tftp_frame = ttk.Frame(notebook, padding=10) # self.tftp_frame = ttk.Frame(notebook, padding=10)
notebook.add(self.tftp_frame, text="TFTP Сервер") # notebook.add(self.tftp_frame, text="TFTP Сервер")
self.create_tftp_tab(self.tftp_frame) # self.create_tftp_tab(self.tftp_frame)
# -------------- Вкладка "Настройки" -------------- # -------------- Вкладка "Настройки" --------------
def create_settings_tab(self, frame): def create_settings_tab(self, frame):
@@ -751,55 +760,55 @@ class SerialAppGUI(tk.Tk):
logging.error(f"Ошибка сохранения файла: {e}", exc_info=True) logging.error(f"Ошибка сохранения файла: {e}", exc_info=True)
messagebox.showerror("Ошибка", f"Не удалось сохранить файл:\n{e}") messagebox.showerror("Ошибка", f"Не удалось сохранить файл:\n{e}")
# -------------- Вкладка "TFTP Сервер" -------------- # -------------- Вкладка "TFTP Сервер" (отключено) --------------
def create_tftp_tab(self, frame): # def create_tftp_tab(self, frame):
ip_frame = ttk.Frame(frame) # ip_frame = ttk.Frame(frame)
ip_frame.pack(fill=X, pady=2) # ip_frame.pack(fill=X, pady=2)
ttk.Label(ip_frame, text="Слушать на IP:").pack(side=LEFT, padx=5) # ttk.Label(ip_frame, text="Слушать на IP:").pack(side=LEFT, padx=5)
self.tftp_listen_ip_var = StringVar(value="0.0.0.0") # self.tftp_listen_ip_var = StringVar(value="0.0.0.0")
ttk.Entry(ip_frame, textvariable=self.tftp_listen_ip_var, width=15).pack(side=LEFT, padx=5) # ttk.Entry(ip_frame, textvariable=self.tftp_listen_ip_var, width=15).pack(side=LEFT, padx=5)
#
port_frame = ttk.Frame(frame) # port_frame = ttk.Frame(frame)
port_frame.pack(fill=X, pady=2) # port_frame.pack(fill=X, pady=2)
ttk.Label(port_frame, text="Порт:").pack(side=LEFT, padx=5) # ttk.Label(port_frame, text="Порт:").pack(side=LEFT, padx=5)
self.tftp_port_var = StringVar(value="6969") # self.tftp_port_var = StringVar(value="6969")
ttk.Entry(port_frame, textvariable=self.tftp_port_var, width=10).pack(side=LEFT, padx=5) # ttk.Entry(port_frame, textvariable=self.tftp_port_var, width=10).pack(side=LEFT, padx=5)
#
folder_frame = ttk.Frame(frame) # folder_frame = ttk.Frame(frame)
folder_frame.pack(fill=X, pady=2) # folder_frame.pack(fill=X, pady=2)
ttk.Label(folder_frame, text="Папка прошивок:").pack(side=LEFT, padx=5) # ttk.Label(folder_frame, text="Папка прошивок:").pack(side=LEFT, padx=5)
self.firmware_folder_var = StringVar(value="Firmware") # self.firmware_folder_var = StringVar(value="Firmware")
ttk.Label(folder_frame, textvariable=self.firmware_folder_var).pack(side=LEFT, padx=5) # ttk.Label(folder_frame, textvariable=self.firmware_folder_var).pack(side=LEFT, padx=5)
ttk.Button(folder_frame, text="Открыть папку", command=lambda: os.startfile(os.path.abspath("Firmware"))).pack(side=LEFT, padx=5) # ttk.Button(folder_frame, text="Открыть папку", command=lambda: os.startfile(os.path.abspath("Firmware"))).pack(side=LEFT, padx=5)
#
button_frame = ttk.Frame(frame) # button_frame = ttk.Frame(frame)
button_frame.pack(fill=X, pady=2) # button_frame.pack(fill=X, pady=2)
ttk.Button(button_frame, text="Запустить TFTP сервер", command=self.start_tftp_server).pack(side=LEFT, padx=5) # ttk.Button(button_frame, text="Запустить TFTP сервер", command=self.start_tftp_server).pack(side=LEFT, padx=5)
ttk.Button(button_frame, text="Остановить TFTP сервер", command=self.stop_tftp_server).pack(side=LEFT, padx=5) # ttk.Button(button_frame, text="Остановить TFTP сервер", command=self.stop_tftp_server).pack(side=LEFT, padx=5)
#
self.tftp_console = tk.Text(frame, wrap="word", height=15) # self.tftp_console = tk.Text(frame, wrap="word", height=15)
self.tftp_console.pack(fill=BOTH, expand=True, padx=5, pady=5) # self.tftp_console.pack(fill=BOTH, expand=True, padx=5, pady=5)
#
def append_tftp_console(self, text): # def append_tftp_console(self, text):
self.tftp_console.insert(END, text) # self.tftp_console.insert(END, text)
self.tftp_console.see(END) # self.tftp_console.see(END)
def start_tftp_server(self): # def start_tftp_server(self):
listen_ip = self.tftp_listen_ip_var.get() # listen_ip = self.tftp_listen_ip_var.get()
try: # try:
port = int(self.tftp_port_var.get()) # port = int(self.tftp_port_var.get())
except ValueError: # except ValueError:
messagebox.showerror("Ошибка", "Некорректное значение порта.") # messagebox.showerror("Ошибка", "Некорректное значение порта.")
return # return
self.tftp_thread = TFTPServerThread(listen_ip, port, self.append_tftp_console) # self.tftp_thread = TFTPServerThread(listen_ip, port, self.append_tftp_console)
self.tftp_thread.start() # self.tftp_thread.start()
def stop_tftp_server(self): # def stop_tftp_server(self):
if self.tftp_thread: # if self.tftp_thread:
self.tftp_thread.stop() # self.tftp_thread.stop()
self.tftp_thread.join() # self.tftp_thread.join()
self.tftp_thread = None # self.tftp_thread = None
self.append_tftp_console("TFTP сервер остановлен.\n") # self.append_tftp_console("TFTP сервер остановлен.\n")
# ========================== # ==========================
# Парсер аргументов (не используется) # Парсер аргументов (не используется)
@@ -811,8 +820,6 @@ class SerialAppGUI(tk.Tk):
# parser.add_argument("--cli", action="store_true", help="Запустить в режиме командной строки (без графики)") # parser.add_argument("--cli", action="store_true", help="Запустить в режиме командной строки (без графики)")
# return parser.parse_args() # return parser.parse_args()
# ========================== # ==========================
# Режим командной строки (не используется) # Режим командной строки (не используется)
# ========================== # ==========================
@@ -879,7 +886,6 @@ class SerialAppGUI(tk.Tk):
# else: # else:
# print("[ERROR] Некорректный выбор.") # print("[ERROR] Некорректный выбор.")
# ========================== # ==========================
# Основной запуск приложения # Основной запуск приложения
# ========================== # ==========================