Um bom ponto de partida para o desenvolvimento de aplicativos com rapidez e python está aqui: link
Em geral, você pode ver a rapidez com que lida com outros arquivos .ui
em seu código nas linhas
from test.AboutTestDialog import AboutTestDialog
from test.PreferencesTestDialog import PreferencesTestDialog
[...]
self.AboutDialog = AboutTestDialog
self.PreferencesDialog = PreferencesTestDialog
Você adicionaria sua nova janela da mesma maneira:
Crie um novo arquivo para sua janela de menu sob o diretório test
, de modo que seu código fique assim:
from test.AboutTestDialog import AboutTestDialog
from test.PreferencesTestDialog import PreferencesTestDialog
from test.MenuTestWindow import MenuTestWindow
[...]
self.AboutDialog = AboutTestDialog
self.PreferencesDialog = PreferencesTestDialog
self.MenuWindow = MenuTestWindow
Em seguida, você pode mostrar a janela no seu método on_button1_clicked
da seguinte forma:
def on_button1_clicked(self, widget, data=None):
print "Loading Menu!"
self.MenuWindow.show()
Agora, a única pergunta que permanece é: como é sua classe MenuTestWindow? Eu simplesmente procuraria nas classes criadas rapidamente e escreveria algo assim:
import gettext
from gettext import gettext as _
gettext.textdomain('test')
import logging
logger = logging.getLogger('test')
from test_lib.MenuWindow import MenuWindow
# See test_lib.MenuWindow for more details about how this class works.
class MenuTestWindow():
__gtype_name__ = "MenuTestWindow"
def finish_initializing(self, builder): # pylint: disable=E1002
"""Set up the about dialog"""
super(MenuTestWindow, self).finish_initializing(builder)
# Code for other initialization actions should be added here.
que nos deixa com o arquivo e a classe test_lib.MenuWindow
(também roubados dos padrões rapidamente):
import gtk
import logging
logger = logging.getLogger('test_lib')
from . helpers import get_builder, show_uri, get_help_uri
from . preferences import preferences
# This class is meant to be subclassed by MenuWindow. It provides
# common functions and some boilerplate.
class Window(gtk.Window):
__gtype_name__ = "Window"
# To construct a new instance of this method, the following notable
# methods are called in this order:
# __new__(cls)
# __init__(self)
# finish_initializing(self, builder)
# __init__(self)
#
# For this reason, it's recommended you leave __init__ empty and put
# your initialization code in finish_initializing
def __new__(cls):
"""Special static method that's automatically called by Python when
constructing a new instance of this class.
Returns a fully instantiated MenuTestWindow object.
"""
builder = get_builder('MenuWindow')
new_object = builder.get_object("menu_window")
new_object.finish_initializing(builder)
return new_object
def finish_initializing(self, builder):
"""Called while initializing this instance in __new__
finish_initializing should be called after parsing the UI definition
and creating a TestWindow object with it in order to finish
initializing the start of the new TestWindow instance.
"""
# Get a reference to the builder and set up the signals.
self.builder = builder
self.ui = builder.get_ui(self, True)
(espero não ter perdido nada ...: -)
Isso deve ser tudo.
No entanto : Se eu estivesse escrevendo este aplicativo, provavelmente não usaria um arquivo .ui
diferente, mas colocaria cada gui / janela adicional na janela principal ui
file (permite chamar a nova janela MenuWindow) e acessá-lo através de algo como isto:
def on_button1_clicked(self, widget, data=None):
mw = self.builder.get_object("MenuWindow")
mw.show()
Dessa forma, você não precisa criar todas as outras classes e arquivos. Mas é o seu aplicativo e você precisa conhecer a si mesmo, se um arquivo .ui
separado for necessário no seu caso.