Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » [Решено] PyGtk2. Как прибить виджет, не закрывая главное окно программы? [RSS Feed]

#1 Фев. 23, 2017 07:56:44

frpaul
От:
Зарегистрирован: 2009-08-21
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] PyGtk2. Как прибить виджет, не закрывая главное окно программы?

Приветствую!

Ситуация:

В начале работы с программой появляется небольшое стартовое меню - класс Bases() (ListStore + TreeView).
Юзер, выбрав одно из значений (имя базы), запускает главное окно программы - класс Viewer().
Условно говоря, Bases().base_start() возвращает True
После этого стартовое меню должно исчезнуть, не разрушая gtk.main()
gtk.main_quit() находится в методе класса Common, отвечающего за обработку коллбэков и является общим для стартового меню и главного окна.


Проблема:

Не могу найти метод, который разрушит стартовое меню Bases(), оставив в покое главное окно Viewer(). Хотелось бы его пристроить в Bases, чтобы в случае, когда Bases().base_start() возвращает True, Bases() самоликвидировалось.



Отредактировано frpaul (Фев. 23, 2017 09:52:21)

Офлайн

#2 Фев. 23, 2017 09:51:02

frpaul
От:
Зарегистрирован: 2009-08-21
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] PyGtk2. Как прибить виджет, не закрывая главное окно программы?

Нашел решение с gtk.Window.hide(), хотя это немного не то, чего я хотел поначалу. Но стартовое меню может пригодиться, так что это решение подходит.

def class Bases(Common):
def __init__(self):
Common.__init__(self)
self.window_b = gtk.Window(gtk.WINDOW_TOPLEVEL)
.....
self.b_tv = gtk.TreeView()
.....
self.window_b.set_type_hint (gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
# Важно, чтобы set_type_hint стоял до всех show(), иначе вылезают ошибки
self.window_b.show()
self.window_b.connect("destroy", self.destroy_cb)

self.b_tv.connect('row-activated', self.base_start) # when clicked on base name - start main programm

def base_start(self, tv, path, column):
Viewer()
self.window_b.hide()

Можно еще window.hide() завернуть в отдельный метод, чтобы его вызывать из Viewer. Так и сделаю, скорее всего. Как и метод show().



Офлайн

  • Начало
  • » GUI
  • » [Решено] PyGtk2. Как прибить виджет, не закрывая главное окно программы? [RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version