私はすぐにアプリを作ろうとしていますが、ウィンドウを作成しました。一方はテストと呼ばれ、もう一方はメニューと呼ばれ、テストはスタートページです。ボタン(button1)をクリックしたときにプログラムしたいと思います。 、menu.uiをロードします。 TestWindowのすべてのコードは次のとおりです。
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
### BEGIN LICENSE
# This file is in the public domain
### END LICENSE
import gettext
from gettext import gettext as _
gettext.textdomain('test')
import gtk
import logging
logger = logging.getLogger('test')
from test_lib import Window
from test.AboutTestDialog import AboutTestDialog
from test.PreferencesTestDialog import PreferencesTestDialog
import os
# See test_lib.Window.py for more details about how this class works
class TestWindow(Window):
__gtype_name__ = "TestWindow"
def finish_initializing(self, builder): # pylint: disable=E1002
"""Set up the main window"""
super(TestWindow, self).finish_initializing(builder)
self.AboutDialog = AboutTestDialog
self.PreferencesDialog = PreferencesTestDialog
# Code for other initialization actions should be added here.
def on_button1_clicked(self, widget, data=None):
print "Loading Menu!"
os.chdir(r"/home/user/test/data/ui/")
os.startfile("menu.ui")
最後の2行は、menu.uiを開始させようとする私の試みです。これを行う方法はありますか?どんな助けでも大歓迎です!ありがとう-Drex
迅速かつpython)を使用したアプリ開発の良い出発点はここにあります: http://developer.ubuntu.com/resources/tutorials/all/diy-media-player-with -pygtk /
一般に、コード内の他の.ui
ファイルを行で処理する速度を確認できます。
from test.AboutTestDialog import AboutTestDialog
from test.PreferencesTestDialog import PreferencesTestDialog
[...]
self.AboutDialog = AboutTestDialog
self.PreferencesDialog = PreferencesTestDialog
同じ方法で新しいウィンドウを追加します。
test
ディレクトリの下にメニューウィンドウ用の新しいファイルを作成し、コードが次のようになるようにします。
from test.AboutTestDialog import AboutTestDialog
from test.PreferencesTestDialog import PreferencesTestDialog
from test.MenuTestWindow import MenuTestWindow
[...]
self.AboutDialog = AboutTestDialog
self.PreferencesDialog = PreferencesTestDialog
self.MenuWindow = MenuTestWindow
次に、次のようにon_button1_clicked
メソッドでウィンドウを表示できます。
def on_button1_clicked(self, widget, data=None):
print "Loading Menu!"
self.MenuWindow.show()
残っている唯一の質問は、MenuTestWindowクラスはどのように見えるかということです。すばやく作成されたクラスを調べて、次のように記述します。
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.
これにより、test_lib.MenuWindow
ファイルとクラスが残ります(これもクイックデフォルトから盗まれます):
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)
(私は何も見逃していなかったと思います... :-)
これですべてです。
ただし:このアプリケーションを作成する場合、おそらく別の.ui
ファイルを使用せず、追加のすべてのGUI /ウィンドウをメインウィンドウのui
ファイル(新しいウィンドウのMenuWindowを呼び出します)を使用して、次のような方法でアクセスします。
def on_button1_clicked(self, widget, data=None):
mw = self.builder.get_object("MenuWindow")
mw.show()
このようにして、他のすべてのクラスやファイルを作成する必要はありません。ただし、これはアプリであり、別の.ui
ファイルが必要な場合は、自分自身を知る必要があります。