2016-09-13 5 views
1

저는 Windows 응용 프로그램 용으로 만 사용되었으므로 GTK 및 Glade를 사용하여 크로스 플랫폼 프로그램을 개발했습니다. 이 질문은 위젯 (나는 그것이 그들이 무엇이라고 불리는가라고 믿는다)과 그것들이 메인 윈도우에 어떻게 추가 될 수 있는지에 관한 것이다. 이미지와 함께 더 잘 설명됩니다.GTK + 3 및 Glade : 런타임시 사이드 바에 위젯 추가 (C#)

Main Window

당신은 오른쪽이 일부러 비워 두었 볼 수 있습니다

나는과 같이하는 MainWindow를있다.

Player Info

그것은 대부분 기본적인 정보를 가지고 : 그것은 선수 정보, 미니 맵, 재고 등이 여기에 내가 오른쪽에 포함 할 위젯 중 하나입니다 같은 동적 콘텐츠를하기 때문입니다 추가 될 것입니다. 코딩, 전체 주 창을 무시하고 딱 맞는 부분에 초점 나는 이런 식으로 뭔가를 표시하려면 :

Final Right Side Bar

문제는이 방법 당신이 할 수있는 사실이면 내가 완전히 이해하지 못하고있다 그것을 할, 또는 실제로 대신 오른쪽 사이드 바를 직접 클라이언트에 코드합니다. 또는 동적으로 코드를 처음부터 * IE 이 PlayerInfo 윈도우가 아닌 런타임시 레이블/etc를 크레테트하십시오.

나는이 일을 할 수있는 기능과 누군가가 나를 이해할 수있는 올바른 방향으로 나를 지적 할 수 있는지 궁금해. 이것이 어떻게 작동해야하는지 완전히 잘못된 것일 수 있습니다.

작성시 C# 코딩으로 위젯을 추가해야한다고 가정합니다.

+0

도 시도했습니다. 위젯 newWidget = 새 위젯 (builder.GetObject ("PlayerInfo"). 핸들); 상자 테스트 = builder.GetObject ("boxDropDown"); test.Add (newWidget); 여기서 boxDropDown은 모든 드롭 다운 상자가있는 오른쪽 상자, I.E.입니다. 플레이어 통계. test.show()를 사용하여 표시 할 수 있지만 대신 자체 창에 표시됩니다. 나는 여기에 작은 것을 놓치고 있다고 생각한다. – Valleriani

답변

1

난 그냥

Widget newWidget = new Widget(builder.GetObject("PlayerInfo").Handle); 
Box test = builder.GetObject("boxDropDown"); 
test.Add(newWidget); 

는 일반적으로 올바른 것을 깨달았다하지만 빈터에 난 창으로 정의하지, 난 사실 등 박스, 그리드, 같은 별도의 위젯을 가지고있을 수 있습니다 그것은 보여준다. 그래서이 코드는 작동합니다.

+1

개체가 GtkWndow가 아니며 다른 개체에 추가하지 않은 경우 GtkBuilder에 대한 모든 참조를 제거하면 해당 개체가 삭제된다는 점에주의하십시오. 또한 복합 위젯 템플릿과 (생성중인 표시 창의 유형에 대해) GtkExpander/GtkRevealer 및/또는 GNOME 도킹 라이브러리를 조회해야합니다. – andlabs

+0

위젯 광고 합성 유형을 일명 템플릿으로 추가하려고 할 때 문제가 있습니다. 프로그램을 실행하면 템플릿이 필요하지 않다고 나와 있습니다. 먼저 템플릿을 설정해야한다고 들었지만 GTK #에서이 작업을 수행하는 방법에 대한 정보는 많지 않습니다. 아이디어가 있습니까? – Valleriani

1

귀하의 질문에 대한 정확한 답을 얻지 못했다면, 인터페이스를 빈틈없이 직접 만들거나, 빈 칸으로 만들거나, 번호를 입력하지 않아도됩니다. (다른 모든 것처럼 작성/연결하십시오. 위젯 당신의 윈도우 내부에) 다음 dinamically 내가 파이썬에서 쓰기 예를 들어

set_label (here를 참조 명령어로 텍스트 (전체 텍스트 또는 caratheristics의 값)) 를 업데이트 것이라고 확신 그래서 (자가 처리기입니다.)

self.my_label_widget.set_label("STR: 26") 

파이썬, 나는 C 코드를 줄 수는 없지만 기본 아이디어는 같다고 생각한다.

관련 문제