Найти - Пользователи
Полная версия: [Решено] PyGtk2. Как прибить виджет, не закрывая главное окно программы?
Начало » GUI » [Решено] PyGtk2. Как прибить виджет, не закрывая главное окно программы?
1
frpaul
Приветствую!

Ситуация:

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


Проблема:

Не могу найти метод, который разрушит стартовое меню Bases(), оставив в покое главное окно Viewer(). Хотелось бы его пристроить в Bases, чтобы в случае, когда Bases().base_start() возвращает True, Bases() самоликвидировалось.
frpaul
Нашел решение с 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().
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB