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
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
__pycache__/TFTPServer.cpython-312.pyc
Firmware/1.jpg
Firmware/2

View File

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