php エディター Zimo は、よくある質問に喜んで答えます: 「GTK4 applicationWindow を ui ファイルから GTK4 アプリケーションに追加できますか?」 答えは「はい」です。 GTK4 では、GtkBuilder を使用して UI ファイルをロードし、その中の applicationWindow ウィジェットを GTK アプリケーションに追加できます。これにより、アプリケーション インターフェイスの設計と管理がより便利になり、開発効率が向上します。ただし、UI ファイルを正常にロードするには、GTK4 に関連するライブラリとツールがシステムにインストールされていることを確認する必要があることに注意してください。この回答がお役に立てば幸いです!
GTK を使用してまだ数日ですが、Go プログラムには GUI が必要なので、これは初心者の質問です。初心者なので、Cambalache を使用して .UI ファイルを生成し、それを Go アプリケーションで呼び出すという、見つけられる最も簡単な方法を採用しました。
.UI ファイルの ApplicationWindow の下にすべてを配置し、それを読み込んで gkt4-builder-tool で正常に動作させますが、私の Go アプリにはイベントがありませんプログラム内の GUI。サンプル コードを見ると、Go プログラムでインスタンス化された GTK アプリケーションに ApplicationWindow をアタッチする必要があることがわかり、次のように >ApplicationWindow を変更しました。 GTK アプリケーションに通常のウィンドウを追加できるため、ウィンドウだけで問題なく動作します。
問題は、UI ファイルから ApplicationWindow を抽出してアプリケーションに添付する方法が見つからないことです。ウィンドウをアプリケーションにアタッチする唯一の方法は app.AddWindow() ですが、これは GtkApplicationWindow ではなく GtkWindow を追加するだけであり、go のような厳密に型指定された言語で追加されます。それは「ノーゴー」です(ダジャレではありません)。
GTK アプリケーションを ApplicationWindow とともに .UI ファイルに直接エクスポートできます。理論的には、これが正常に実行できれば、おそらくこの方法で接続することで両方を抽出できますが、私はgkt4-builder-tool が (複数の構成を試した後) 検証エラーを繰り返し発生するため、GTK アプリケーション、ApplicationWindow、およびメニューを正常にエクスポートできませんでした。そのため、Cambalache はその組み合わせをエクスポートする方法がわからない、またはエクスポートする方法がわからない、または実際には .UI ファイル内の正当な組み合わせではありません。
そこで私の質問は、ApplicationWindow を .UI ファイルに保存するのをやめて、コード内で ApplicationWindow ウィジェットを構築するだけでよいでしょうか、それとも何か他の選択肢があるでしょうか?まだ学習していないのですか?
本当に必要でない場合は、ApplicationWindow を無視して、Windows を別のパスとして使用することもできます。
あなたの知識と経験に感謝します。
###ありがとう!
更新:
Kripto のコメントに基づいてさらに明確になります。これがコードです。これは直接実行されません。これは、より大きなプログラムから main() 内の関連するスニペットを抽出しており、
env, log := boot.Initialize() がこのスニペットに存在しないためです。問題を理解することが重要です。
アプリケーション ウィンドウ が 1 つしかないことはわかっています。この概念は、同じではないにしても、古い Visual Basic 時代の アプリケーション ウィンドウ に似ています。
以下は、go コードと、.UI ファイル内の関連要素を含む要約バージョンです:
.UI ファイルの 8 行目を変更すると:
8123e48c5002051e5e3cadeb41cc56f6
###に関して:###
2474e20c2716df4ddfdb5cde8a14f2e0
Go Code
.UI ファイルを開き、機能しますが、アプリケーション ウィンドウが表示されません。 .UI
ファイルの 8 行目をそのままにしても、ファイルは開きますが、結果として得られる GUI は非対話型であり、実行中の Go プログラムを停止した場合にのみオフになります。GoLand のデバッグ モードで実行中。これを実行するには、go プログラムに 2 つの変更を加える必要があったためです。 : 次の行を変更します:
).Cast().(*gtk.Window)
###に###
appWindow := builder.GetObject(
).Cast().(*gtk.ApplicationWindow)
この行をコメントアウトします:
リーリー
これは .UI ファイルです:
リーリー
アップデート 2
我找到了部分答案。您可以做到这一点,但您需要将 App 添加到 ApplicationWindow 中,而不是相反,因此这是一个不同的功能。这是它的工作方式(它也有点短,因为我了解到有一个从文件加载的函数):
func activate(app *gtk.Application, log *loggers.Logger, guiPath string, appName string) { const ext = `.ui` guiPath += `/` builder := gtk.NewBuilderFromFile(guiPath + appName + ext) // builder := gtk.NewBuilderFromFile(guiPath + `Another template File.ui`) appWindow := builder.GetObject(`appWin`).Cast().(*gtk.ApplicationWindow) entry := builder.GetObject(`GeneralSetup.Timezone`).Cast().(*gtk.Entry) entry.Connect("changed", func() { println(`Changed`) }) // ***** THE LINE THAT MAKES THE DIFFERENCE *** appWindow.SetApplication(app) appWindow.Show() }
我仍然不确定是否存在将应用程序对象导出到这些 .UI 文件之一的情况。
我还没有找到任何人这样做的例子,我倾向于相信这不是你应该做的,但我仍在学习,所以很容易出错。
更新 2 提供了此问题的大部分答案。
此外,到目前为止,我认为没有任何理由将应用程序添加到 UI 文件中。无论如何,它往往会抛出错误。
以上がGTK4 applicationWindow を ui ファイルから GTK4 アプリケーションに追加できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。