Проблема, с которой вы столкнулись, может быть вызвана несколькими причинами. Важно гарантировать, что окно вашего приложения открывается и управляется правильно. Ниже приведены несколько рекомендаций и примеров кода для решения вашей проблемы:
1. **Проблемы с управлением окнами**: Если вы не сохраняете ссылку на созданное окно, оно может быть автоматически закрыто, как только теряет все ссылки на себя. Убедитесь, что вы сохраняете ссылку на ваше окно в вашем основном классе или в глобальной области видимости.
2. **Избегайте повторного создания окна**: Если окно уже открыто, лучше просто показать его, вместо создания нового экземпляра.
3. **Используйте обработчики событий правильно**: Убедитесь, что вы правильно обрабатываете события и сохраняете все ссылки на виджеты.
Вот пример, как можно организовать код для открытия окна:
```python
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
class MyApp:
def __init__(self):
# Создаем основное окно
self.window = Gtk.Window(title="Hello World")
self.window.set_default_size(200, 100)
label = Gtk.Label(label="Hello, World!")
self.window.add(label)
# Присоединяем сигнал к закрытию окна
self.window.connect("destroy", Gtk.main_quit)
# Создаем иконку в системном трее
self.tray_icon = Gtk.StatusIcon()
self.tray_icon.set_from_icon_name("application-x-executable") # Укажите ваш иконку
self.tray_icon.connect("popup-menu", self.on_tray_icon_right_click)
self.tray_icon.connect("activate", self.on_tray_icon_click)
self.window_visible = False # Состояние окна
def on_tray_icon_click(self, icon):
if not self.window_visible:
self.window.show_all()
self.window_visible = True
def on_tray_icon_right_click(self, icon, button, time):
menu = Gtk.Menu()
item_open = Gtk.MenuItem(label="Open")
item_open.connect("activate", self.on_open)
menu.append(item_open)
item_quit = Gtk.MenuItem(label="Quit")
item_quit.connect("activate", self.on_quit)
menu.append(item_quit)
menu.show_all()
menu.popup(None, None, None, button, time)
def on_open(self, widget):
if not self.window_visible:
self.window.show_all()
self.window_visible = True
def on_quit(self, widget):
Gtk.main_quit()
def run(self):
Gtk.main()
if __name__ == "__main__":
app = MyApp()
app.run()
```
### Основные моменты:
- **Хранение состояния окна**: Мы используем `self.window_visible` для отслеживания состояния окна.
- **Правильное открытие окна**: Метод `on_open` проверяет состояние `self.window_visible` и только в случае, если окно не открыто — открывает его.
- **Убедитесь, что GTK правильно выполняется**: `Gtk.main()` завершает выполнение приложения, поэтому он должен оставаться на месте.
Используйте этот шаблон как основу и адаптируйте его под свои нужды. Также, если у вас есть стек вызовов, например, от `traceback`, это поможет диагностировать причину сбоя. Убедитесь, что ошибок в консоли при запуске приложения нет.