Add status bar with connection and settings information
- Implement create_status_bar method to add a new status bar - Add connection indicator with color-coded status - Create tooltip for connection status details - Update status bar with current port, baudrate, and copy mode settings - Integrate status bar updates in connection and settings change events
This commit is contained in:
@@ -700,6 +700,12 @@ class SerialAppGUI(tk.Tk):
|
|||||||
self.create_menu()
|
self.create_menu()
|
||||||
self.create_tabs()
|
self.create_tabs()
|
||||||
|
|
||||||
|
# Добавляем статус бар
|
||||||
|
self.create_status_bar()
|
||||||
|
|
||||||
|
# Обновляем информацию в статус баре
|
||||||
|
self.update_status_bar()
|
||||||
|
|
||||||
# Проверка первого запуска
|
# Проверка первого запуска
|
||||||
self.check_first_run()
|
self.check_first_run()
|
||||||
|
|
||||||
@@ -763,6 +769,7 @@ class SerialAppGUI(tk.Tk):
|
|||||||
# Обработчик изменения настроек
|
# Обработчик изменения настроек
|
||||||
def on_settings_changed(self):
|
def on_settings_changed(self):
|
||||||
self.settings = settings_load()
|
self.settings = settings_load()
|
||||||
|
self.update_status_bar() # Добавляем обновление статус бара
|
||||||
|
|
||||||
# Открытие окна настроек
|
# Открытие окна настроек
|
||||||
def open_settings(self):
|
def open_settings(self):
|
||||||
@@ -849,6 +856,7 @@ class SerialAppGUI(tk.Tk):
|
|||||||
self.connection = create_connection(self.settings)
|
self.connection = create_connection(self.settings)
|
||||||
if self.connection:
|
if self.connection:
|
||||||
self.append_interactive_text("[INFO] Подключение установлено.\n")
|
self.append_interactive_text("[INFO] Подключение установлено.\n")
|
||||||
|
self.update_status_bar() # Обновляем статус бар
|
||||||
else:
|
else:
|
||||||
self.append_interactive_text("[ERROR] Не удалось установить соединение.\n")
|
self.append_interactive_text("[ERROR] Не удалось установить соединение.\n")
|
||||||
|
|
||||||
@@ -861,6 +869,7 @@ class SerialAppGUI(tk.Tk):
|
|||||||
pass
|
pass
|
||||||
self.connection = None
|
self.connection = None
|
||||||
self.append_interactive_text("[INFO] Соединение закрыто.\n")
|
self.append_interactive_text("[INFO] Соединение закрыто.\n")
|
||||||
|
self.update_status_bar() # Обновляем статус бар
|
||||||
else:
|
else:
|
||||||
messagebox.showinfo("Информация", "Соединение не установлено.")
|
messagebox.showinfo("Информация", "Соединение не установлено.")
|
||||||
|
|
||||||
@@ -1264,6 +1273,95 @@ class SerialAppGUI(tk.Tk):
|
|||||||
if not self.tftp_ip_var.get() in adapters:
|
if not self.tftp_ip_var.get() in adapters:
|
||||||
self.tftp_ip_var.set(adapters[0])
|
self.tftp_ip_var.set(adapters[0])
|
||||||
|
|
||||||
|
# Добавляем новый метод для создания статус бара
|
||||||
|
def create_status_bar(self):
|
||||||
|
self.status_bar = ttk.Frame(self)
|
||||||
|
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
|
||||||
|
|
||||||
|
# Создаем индикатор состояния используя символ
|
||||||
|
self.connection_indicator = ttk.Label(
|
||||||
|
self.status_bar,
|
||||||
|
text="⬤", # Используем символ ЧЕРНЫЙ КРУГ (U+2B24)
|
||||||
|
font=("Segoe UI", 10), # Уменьшаем размер для лучшего выравнивания
|
||||||
|
width=2, # Фиксированная ширина для стабильного положения
|
||||||
|
anchor='center', # Центрируем символ
|
||||||
|
padding=(5, 2) # Добавляем вертикальный отступ для выравнивания с текстом
|
||||||
|
)
|
||||||
|
self.connection_indicator.pack(side=tk.LEFT)
|
||||||
|
|
||||||
|
# Создаем всплывающую подсказку
|
||||||
|
self.tooltip = None
|
||||||
|
self.connection_indicator.bind('<Enter>', self.show_connection_tooltip)
|
||||||
|
self.connection_indicator.bind('<Leave>', self.hide_connection_tooltip)
|
||||||
|
|
||||||
|
ttk.Separator(self.status_bar, orient=tk.VERTICAL).pack(side=tk.LEFT, fill=tk.Y, padx=5)
|
||||||
|
|
||||||
|
# Остальные элементы статус бара...
|
||||||
|
self.port_label = ttk.Label(self.status_bar, text="", padding=(5, 2))
|
||||||
|
self.port_label.pack(side=tk.LEFT)
|
||||||
|
|
||||||
|
ttk.Separator(self.status_bar, orient=tk.VERTICAL).pack(side=tk.LEFT, fill=tk.Y, padx=5)
|
||||||
|
|
||||||
|
self.baudrate_label = ttk.Label(self.status_bar, text="", padding=(5, 2))
|
||||||
|
self.baudrate_label.pack(side=tk.LEFT)
|
||||||
|
|
||||||
|
ttk.Separator(self.status_bar, orient=tk.VERTICAL).pack(side=tk.LEFT, fill=tk.Y, padx=5)
|
||||||
|
|
||||||
|
self.copy_mode_label = ttk.Label(self.status_bar, text="", padding=(5, 2))
|
||||||
|
self.copy_mode_label.pack(side=tk.LEFT)
|
||||||
|
|
||||||
|
ttk.Separator(self.status_bar, orient=tk.VERTICAL).pack(side=tk.LEFT, fill=tk.Y, padx=5)
|
||||||
|
|
||||||
|
self.version_label = ttk.Label(self.status_bar, text=f"Версия: {VERSION}", padding=(5, 2))
|
||||||
|
self.version_label.pack(side=tk.RIGHT)
|
||||||
|
|
||||||
|
# Добавляем методы для управления всплывающей подсказкой
|
||||||
|
def show_connection_tooltip(self, event):
|
||||||
|
x, y, _, _ = self.connection_indicator.bbox("insert")
|
||||||
|
x += self.connection_indicator.winfo_rootx() + 25
|
||||||
|
y += self.connection_indicator.winfo_rooty() + 20
|
||||||
|
|
||||||
|
# Удаляем предыдущий tooltip если есть
|
||||||
|
self.hide_connection_tooltip(event)
|
||||||
|
|
||||||
|
self.tooltip = tk.Toplevel(self)
|
||||||
|
self.tooltip.wm_overrideredirect(True)
|
||||||
|
self.tooltip.wm_geometry(f"+{x}+{y}")
|
||||||
|
|
||||||
|
label = ttk.Label(
|
||||||
|
self.tooltip,
|
||||||
|
text="Состояние подключения: " +
|
||||||
|
("Подключено" if self.connection else "Отключено"),
|
||||||
|
justify=tk.LEFT,
|
||||||
|
background="#ffffe0",
|
||||||
|
relief=tk.SOLID,
|
||||||
|
borderwidth=1,
|
||||||
|
padding=(5, 2)
|
||||||
|
)
|
||||||
|
label.pack()
|
||||||
|
|
||||||
|
def hide_connection_tooltip(self, event):
|
||||||
|
if self.tooltip:
|
||||||
|
self.tooltip.destroy()
|
||||||
|
self.tooltip = None
|
||||||
|
|
||||||
|
# Обновляем метод update_status_bar
|
||||||
|
def update_status_bar(self):
|
||||||
|
# Обновляем индикатор подключения
|
||||||
|
if self.connection:
|
||||||
|
self.connection_indicator.configure(text="⬤", foreground='green')
|
||||||
|
else:
|
||||||
|
self.connection_indicator.configure(text="⬤", foreground='red')
|
||||||
|
|
||||||
|
# Остальные обновления статус бара
|
||||||
|
port = self.settings.get("port", "Не выбран")
|
||||||
|
baudrate = self.settings.get("baudrate", "9600")
|
||||||
|
copy_mode = "Построчный" if self.settings.get("copy_mode") == "line" else "Блочный"
|
||||||
|
|
||||||
|
self.port_label.config(text=f"Порт: {port}")
|
||||||
|
self.baudrate_label.config(text=f"Скорость: {baudrate}")
|
||||||
|
self.copy_mode_label.config(text=f"Режим: {copy_mode}")
|
||||||
|
|
||||||
# ==========================
|
# ==========================
|
||||||
# Основной запуск приложения
|
# Основной запуск приложения
|
||||||
# ==========================
|
# ==========================
|
||||||
|
|||||||
Reference in New Issue
Block a user