2012-03-13 3 views
0

GtkLabel의 데이터가 표시되는 GtkTable이 있습니다. 이 라벨에는 정렬이 가능합니다 (예 : 정렬, 패딩, 전경색). 테이블의 모양에 대한 예제 :테이블을 편집 가능/선택 가능 라벨로 가득 채우는 좋은 방법은 무엇입니까?

The Display---a GtkTable filled with GtkLabels

이 테이블에있는 정보의 각 라인은 당신이 볼 테이블에 부착 자신의 GtkLabel에 표시됩니다. 자, 나는 데이터를 선택 가능하고 편집 가능하게하려고 시도하고있다. 데이터가 여러 위젯 (각 GtkLabel에 있음)에 분산되어 있고 여러 위젯에서 텍스트를 선택할 수있는 방법이없는 것 같기 때문에 이는 매우 쉬운 일이 아닙니다. 나는이 문제에 대한 내 자신의 해결책을 내놓았다 :

기본적으로 GtkEventBox에 이벤트를 등록 할 수 있도록 GtkTable에 포장하고 있으며 이벤트 상자 (물론 그 자식 VBox)는 GtkTextView에있는 것과 동일한 텍스트 (서식없는)를 포함하는 GtkTextView입니다. 이 텍스트 뷰는 내가 테이블에서 원하는 편집 가능하고 선택 가능한 영역으로 사용됩니다. 이 기능을 구현하기 위해 테이블과 텍스트 뷰의 가시성을 서로 반대 방향으로 유지합니다 ... 그래서 상자 안의 서로 위에 포장되어 '모드'를 전환하는 동일한 위젯으로 보입니다.

텍스트 뷰 :

The Editable--A GtkTextView containing the same text as in the Display

그래서,이 가시성 토글로, 나는 말하자면, 버튼을 눌러/해제 이벤트 이벤트 상자에 일부 신호를 연결할 수 있으며, 초점/아웃 유형을 이벤트를 사용하여 원하는 테이블 모드를 가져옵니다.

eventbox = gtk.EventBox() 
vbox = gtk.VBox() 
table = gtk.Table() #Create the table, and fill it with labels 
textview = gtk.TextView() #Create the textview, and set its textbuffer to the same data as the table 

eventbox.add(vbox) 
vbox.pack_start(table) 
vbox.pack_start(textview) 
eventbox.connect("button-release-event", toggle_mode) 
textview.connect('focus-out-event', toggle_mode) 

def toggle_mode(widget, event): 
    if table.get_visible(): 
     table.set_visible(False) 
     textview.set_visible(True) 
    else: 
     table.set_visible(True) 
     textview.set_visible(False) 

그래서, 내 질문은 :이 내가 무엇을 달성하고자하는을위한 좋은 방법이다

일부 샘플 코드

는 더 나은 이해를 얻을 수 있습니까? 누구든지이 일을하기 위해 다른 경험이나 더 좋은 방법이 있습니까? 궁극적으로 GtkTable이 형식이 지정된 GtkLabel의 모양으로 채워지는 것처럼 멋지게 형식화 된 텍스트를 갖고 싶습니다. 텍스트 한 조각을 하나의 조각으로 선택할 수 있습니다. 어떻게 할 수 있습니까?

답변

2

GtkTextView를 모든 용도로 사용하는 것이 좋습니다. 그러나 GtkLabel을 사용하여 외형을 고집하는 경우 사용자의 방법은 다른 어떤 방법과 마찬가지로 좋습니다 (이 유형의 다른 인기있는 방법은 숨겨진 탭이있는 GtkNotebook을 사용하는 것입니다) .

그래도 텍스트를 편집 할 수 있음을 사용자에게 알려주는 시각적 표시가 필요합니다. 아마도 토글 버튼 일 것입니다.

+0

나는 GtkTextView를 사용하는 것을 고려했다. 그러나 나의 유일한 관심사는 포맷팅이다. 필자는 색상 표 및 텍스트 형식을 얻기 위해 texttables가 있다는 것을 알고 있지만 거기에서 정렬 및 패딩을 얻을 수 있다는 것도 매우 중요합니다. 각기 다른 방법으로 정렬 된 여러 개의 열이있는 테이블이 있습니다. GtkTextView에서 이런 종류의 기능을 사용할 수 있습니까? – Wes

+0

정렬이 바뀔 수 있고 텍스트 테이블이나 패딩에 대해 알지 못한다고 확신합니다. 그래, 네가 그 질문에서 설명했던 것이 아마도 가장 좋은 방법 일거야. –

+0

제안 해 주셔서 감사합니다. 나는 여러 GtkTextView를 함께 사용하여 GtkHBox에 묶었습니다 (textviews는 각각 테이블의 열을 나타냄). 이 방법을 사용하면 열마다 선택 가능/편집 가능한 텍스트를 가져올 수 있었지만 여전히 내가 원하는대로 형식을 지정할 수 있습니다. – Wes

관련 문제