2012-03-13 38 views
0

我有一個GtkTable包含它顯示的幾個GtkLabel的數據。這些標籤可以對它們進行格式化(即對齊,填充,前景色)。 一個什麼樣的表可能看起來像一個例子:什麼是一個很好的方法來使一個表格可以編輯/選擇標籤?

The Display---a GtkTable filled with GtkLabels

的信息,在這個表中的每行顯示爲連接到你看錶了自己的GtkLabel的。現在,我試圖讓數據是可選擇的,並且可能是可編輯的。考慮到數據分佈在幾個小部件(每個小部件都在它自己的GtkLabel中),並且似乎沒有任何方法可以跨多個小部件使文本可選,這似乎並不容易。我已經想出了我自己的解決方案:

本質上,我將GtkTable打包到GtkEventBox中,以便我可以在表上註冊事件,並且在事件框中打包事件(好吧,它的子VBox )是一個包含與GtkTable中相同的文本(無格式)的GtkTextView。這個文本視圖將作爲我希望從表格中編輯和選擇的區域。爲了實現這個功能,我保持table和textview的可見性彼此相反......因此,在盒子中的eachother之上,它們看起來是切換'模式'的相同小部件。

TextView的:

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,但我唯一關心的是格式。我知道有文本表格以獲得着色和文本格式,但是我能夠在那裏獲得對齊和填充也很重要。我有一些有多列的表格,每列對齊一定的方式。我可以從GtkTextView獲得這種功能嗎? – Wes 2012-03-14 14:00:23

+0

我很確定對齊可以改變,不知道在文本表或填充。所以是的,你在問題中解釋的可能是最好的方法。 – 2012-03-15 10:01:24

+0

感謝您的建議。我確實最終使用了幾個GtkTextView組合成一個GtkHBox(每個文本視圖都代表了表格中的一列)。這種方法允許我獲得每列可選擇/可編輯的文本,並且仍然允許我以我喜歡的格式進行格式化。 – Wes 2012-03-17 03:30:48

相關問題