2015-06-21 5 views
0

Im, использующий PyGTK для создания gui в python, и я не могу понять, как сделать под-окно. Например, у меня есть мое главное окно:Создание под-окна с PyGTK

class Main(Gtk.Window): 
    def __init__(self): 
     Gtk.Window.__init__(self, title="GCT") 

     self.box = Gtk.Box() 
     self.set_default_size(300, 300) 
     self.set_position(Gtk.WindowPosition.CENTER) 
     self.table = Gtk.Table(6, 5) 

     self.button = Gtk.Button("sub-window") 
     self.table.attach(self.button, 0, 2, 0, 1) 

     self.box.add(self.table) 
     self.add.(self.box) 
     self.show_all() 

При нажатии кнопки субокна я хотел бы, чтобы запустить новое окно независимо от моего главного окна и это позволит мне еще работать главное окно без закрытия субокно. Как я смогу это сделать?

ответ

2
from gi.repository import Gtk 

class AnotherWindow(Gtk.Window): 
    def __init__(self): 
     Gtk.Window.__init__(self, title="GCT") 
     self.connect("destroy", lambda x: Gtk.main_quit()) 

     self.add(Gtk.Label("This is another window")) 
     self.show_all() 



class Main(Gtk.Window): 
    def __init__(self): 
     Gtk.Window.__init__(self, title="GCT") 
     self.connect("destroy", lambda x: Gtk.main_quit()) 

     self.box = Gtk.Box() 
     self.set_default_size(300, 300) 
     self.set_position(Gtk.WindowPosition.CENTER) 
     self.table = Gtk.Table(6, 5) 

     self.button = Gtk.Button("sub-window") 
     self.button.connect("clicked", self.open_window) 
     self.table.attach(self.button, 0, 2, 0, 1) 

     self.box.add(self.table) 
     self.add(self.box) 
     self.show_all() 

    def open_window(self, win): 
     subw = AnotherWindow() 


def main(): 
    m = Main() 
    Gtk.main() 
    return 0 

if __name__ == '__main__': 
    main() 

Каждый раз, когда вы нажимаете кнопку sub_window, открывается другое окно. Они будут складываться друг на друга, поэтому вы не увидите много :-)

Вы всегда должны добавить соединение к действию destroy - иначе mainloop Gtk никогда не остановится, и вы не получите контроль к клавиатуре.