ui 파일의 GTK4 applicationWindow를 GTK4 애플리케이션에 추가할 수 있습니까?
php 편집자 Zimo는 "ui 파일의 GTK4 applicationWindow를 GTK4 애플리케이션에 추가할 수 있습니까?"라는 자주 묻는 질문에 기꺼이 답변해 드립니다. 대답은 '예'입니다! GTK4에서는 GtkBuilder를 사용하여 UI 파일을 로드하고 그 안에 applicationWindow 위젯을 GTK 애플리케이션에 추가할 수 있습니다. 이러한 방식으로 애플리케이션 인터페이스를 보다 편리하게 디자인하고 관리할 수 있으며 개발 효율성을 향상시킬 수 있습니다. 그러나 UI 파일을 성공적으로 로드하려면 GTK4 관련 라이브러리와 도구가 시스템에 설치되어 있는지 확인해야 합니다. 이 답변이 도움이 되기를 바랍니다!
질문 내용
저는 GTK을 며칠밖에 사용하지 않았는데 바둑 프로그램에 GUI가 필요해서 초보자 질문입니다. 저는 초보자이기 때문에 .UI 파일을 생성한 다음 Go 앱에서 호출하여 Cambalache 사용을 시작할 수 있는 가장 쉬운 방법을 선택했습니다.
모든 것을 .UI 파일의 ApplicationWindow에 넣고 gkt4-builder-tool을 사용하여 로드하고 제대로 작동하도록 두었지만 Go 애플리케이션에는 GUI에 이벤트가 없습니다. 샘플 코드를 보면 ApplicationWindow를 내 Go 프로그램에서 인스턴스화된 GTK 애플리케이션에 첨부해야 한다는 것을 알았고 >ApplicationWindow를 그냥 창으로 변경했는데 일반 창을 추가할 수 있기 때문에 제대로 작동했습니다. GTK 애플리케이션에.
문제는 UI 파일에서 ApplicationWindow를 추출하여 애플리케이션에 첨부하는 방법을 찾을 수 없다는 것입니다. 애플리케이션에 창을 연결하는 유일한 방법은 app.AddWindow()이지만 GtkApplicationWindow가 아닌 GtkWindow만 추가하며 go와 같은 강력한 유형의 언어에서는 "no go"입니다(말장난 의도 없음). .
ApplicationWindow가 있는 GTK 애플리케이션을 .UI 파일로 직접 내보낼 수 있으며 이론적으로 이 작업을 성공적으로 수행할 수 있다면 둘 다 추출하고 이 방법으로 연결할 수도 있습니다. 그러나 를 성공적으로 내보내지 못했습니다. GTK 애플리케이션, ApplicationWindow 및 메뉴는 gkt4-builder-tool이 여러 구성을 시도한 후 계속해서 유효성 검사 오류를 발생시키므로 Cambalache 가 해당 조합을 내보내는 방법을 모르거나 이를 얻는 방법을 모르기 때문입니다. 이를 수행하거나 실제로 .UI 파일에서 합법적인 조합이 아닌 경우.
그래서 제 질문은 ApplicationWindow를 .UI 파일에 저장하는 것을 포기하고 ApplicationWindow 위젯을 코드로 빌드해야 하는가입니다. 아니면 다른 옵션이 있습니까? 아직 배우지 못하셨나요?
꼭 필요하지 않다면 ApplicationWindow를 버리고 Windows를 다른 경로로 사용할 수도 있습니다.
당신의 지식과 경험에 감사드립니다.
감사합니다!
업데이트:
Kripto의 의견을 바탕으로 더욱 명확해졌습니다.
코드는 다음과 같습니다. 더 큰 프로그램에서 main()의 관련 조각을 추출했고 env, log := boot.Initialize()
이 조각에는 존재하지 않기 때문에 이것은 직접 실행되지 않지만 문제를 이해하는 것은 중요하지 않습니다.
GTK GUI에는 응용 프로그램 창이 하나만 있다는 것을 알고 있습니다. 개념은 예전 Visual Basic 시절의 Application Window과 동일하지는 않더라도 비슷합니다.
다음은 go 코드와 .UI 파일의 관련 요소가 포함된 압축 버전입니다.
.UI 파일에서 8행을 변경하는 경우:
<object class="GtkApplicationWindow" id="appWin">
이것에:
<object class="GtkWindow" id="appWin">
Go 코드는 .UI 파일을 열고 작동하지만 지금은 응용 프로그램 창이 없습니다.
.UI 파일의 8행을 그대로 두면 파일은 계속 열리지만 결과 GUI는 비대화형이며 GoLand에서 디버그 모드로 실행에서 실행 중인 Go 프로그램을 중지할 때만 닫힙니다. . 그 이유는 그것을 실행하기 위해 go 프로그램에 두 가지 변경 사항을 적용해야 했기 때문입니다. :
- 이 줄을 바꾸세요:
appWindow := builder.GetObject(
appWin).Cast().(*gtk.Window)
to
appWindow := builder.GetObject(
appWin).Cast().(*gtk.ApplicationWindow)
- 다음 줄을 주석 처리하세요:
app.AddWindow(appWindow)
두 번째는 문제입니다. 이제 창이 애플리케이션에 연결되지 않아서 대화형이 아닌 것이 확실하기 때문입니다.
으아악.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 文件中。无论如何,它往往会抛出错误。
위 내용은 ui 파일의 GTK4 applicationWindow를 GTK4 애플리케이션에 추가할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사에서는 GO의 패키지 가져 오기 메커니즘을 설명합니다. 명명 된 수입 (예 : 가져 오기 & quot; fmt & quot;) 및 빈 가져 오기 (예 : import _ & quot; fmt & quot;). 명명 된 가져 오기는 패키지 내용을 액세스 할 수있게하고 빈 수입은 t 만 실행합니다.

이 기사에서는 웹 애플리케이션에서 페이지 간 데이터 전송에 대한 Beego의 NewFlash () 기능을 설명합니다. NewFlash ()를 사용하여 컨트롤러간에 임시 메시지 (성공, 오류, 경고)를 표시하여 세션 메커니즘을 활용하는 데 중점을 둡니다. 한계

이 기사에서는 MySQL 쿼리 결과를 GO 구조 슬라이스로 효율적으로 변환합니다. 수동 구문 분석을 피하고 최적의 성능을 위해 데이터베이스/SQL의 스캔 방법을 사용하는 것을 강조합니다. DB 태그 및 Robus를 사용한 구조물 필드 매핑에 대한 모범 사례

이 기사에서는 GO의 제네릭에 대한 사용자 정의 유형 제약 조건을 살펴 봅니다. 인터페이스가 일반 함수에 대한 최소 유형 요구 사항을 정의하여 유형 안전 및 코드 재사성을 향상시키는 방법에 대해 자세히 설명합니다. 이 기사는 또한 한계와 모범 사례에 대해 설명합니다

이 기사는 단위 테스트를 위해 이동 중에 모의와 스터브를 만드는 것을 보여줍니다. 인터페이스 사용을 강조하고 모의 구현의 예를 제공하며 모의 집중 유지 및 어설 션 라이브러리 사용과 같은 모범 사례에 대해 설명합니다. 기사

이 기사는 OS.WriteFile (작은 파일에 적합)과 OS.OpenFile 및 Buffered Writes (큰 파일에 최적)를 비교하여 효율적인 파일 쓰기를 자세히 설명합니다. 강력한 오류 처리, 연기 사용 및 특정 오류 확인을 강조합니다.

이 기사는 GO에서 단위 테스트 작성, 모범 사례, 조롱 기술 및 효율적인 테스트 관리를위한 도구를 다루는 것에 대해 논의합니다.

이 기사는 추적 도구를 사용하여 GO 응용 프로그램 실행 흐름을 분석합니다. 수동 및 자동 계측 기술, Jaeger, Zipkin 및 OpenTelemetry와 같은 도구 비교 및 효과적인 데이터 시각화를 강조합니다.
