2012-03-13 39 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

相关问题