4

GTK3 と Glade を使用して Python プログラムを設計しています。ユーザーが構築する必要があるものに応じて、インターフェイスを変更する必要があります。

最初のインターフェースは次のようなものです。

____________________________________________________
| Label one | Text entry one |  Save object button |
| Label two | Text entry two |                     |
____________________________________________________

これは、Gtk.Box() 内のトップ レベル ウィンドウにあり、ボックスの片側にラベルとテキスト エントリとして Gtk.Grid() が設定され、ボックスのセクションにオブジェクトの保存ボタンがあります。(実際の私のインターフェースは、テーブル内にさらに多くのラベル、テキストエントリ、トグルボタン、コンボボックスなどがあるよりもはるかに複雑です)。見たい場合は、http://sourceforge.net/projects/createlauncherにあります。

ユーザーが別のオブジェクトを作成する必要がある場合は、次のようになります。

________________________________________________________
| Label three | Text entry three |  Save object button |
| Label four  | Text entry four  |                     |
________________________________________________________

変更を実装する方法についての提案は何ですか?

ラベル one-two と entry one-two を追跡し、それらを非表示にして他のものを表示することを考えましたが、フォーマットが乱れています。元に戻す必要がある場合は、各ウィジェットを削除して再構築することをいじりました。大変な作業です。私はGladeを使用しているので、Gtk.Box()を削除して他のインターフェースのニーズに合わせて作り直すことを考えたので、別の「領域」を作成するのは難しいですが、Gladeを使用すると法外に思えます。

私はあらゆる選択肢を受け入れます。

4

3 に答える 3

1

複合カスタムウィジェット?

class ObjectOneSettings(Gtk.Grid):
    def __init__(self):
        Gtk.Grid.__init__(self)
        self.label_one = Gtk.Label('Label One')
        self.label_two = Gtk.Label('Label Two')
        self.entry_one = Gtk.Entry()
        self.entry_two = Gtk.Entry()
        self.attach(self.label_one, 0, 0, 1, 1)
        self.attach(self.label_two, 0, 1, 1, 1)
        self.attach(self.entry_one, 1, 0, 1, 1)
        self.attach(self.entry_two, 1, 1, 1, 1)

次に、ウィンドウを変更する必要があるときに、ウィジェットを破棄してObjectOneSettingsウィジェットに置き換えることができます。ObjectTwoSettings

于 2012-04-24T20:03:21.740 に答える
1

Glade を使用する場合、2 つのアプローチが考えられます。

1 つ目は、必要に応じて Python コードで Gtk.Label と Gtk.Entry のラベルを動的に変更することです。

2 つ目は、Glade でメイン ウィンドウ内にない別の Gtk.Box を作成し、必要なときに追加することです (最初にウィンドウからもう 1 つを削除します)。これは次のようになります。

別箱付きグレード

于 2014-08-09T19:40:13.927 に答える
1

ちょっとハックかもしれませんが、隠しタブと境界線のあるノートブックを使用できます。

于 2012-07-08T03:02:00.843 に答える