我有一个GtkTable,它包含几个显示的GtkLabel数据。这些标签可以对它们进行格式化(即对齐,填充,前景色)。 表格的示例:
此表中的每一行信息都显示在附加到您看到的表格的GtkLabel中。现在,我试图让数据可选择并且可能是可编辑的。考虑到数据分布在几个小部件(每个小部件都在自己的GtkLabel中),这似乎并不容易,并且似乎没有任何方法可以跨多个小部件选择文本。我已经找到了解决这个问题的方法:
基本上,我将GtkTable打包到GtkEventBox中,以便我可以在表上注册事件,并且,在事件框中打包(好吧,它的子VBox)是一个包含相同文本(未格式化)的GtkTextView。什么是GtkTable。此textview将作为我想要的可编辑和可选区域。为了实现这一功能,我保持表格和文本视图的可见性彼此相反......因此,在框中的彼此顶部打包时,它们看起来是切换“模式”的相同小部件。
textview:
因此,通过这种可见性切换,我可以将一些信号附加到事件框,例如按钮按下/释放事件,以及聚焦输入/输出类型事件,以获得所需的表格模式。
一些示例代码可以更好地理解:
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的外观,但能够选择一个文本块作为一个整体。怎么办呢?
答案 0 :(得分:2)
我建议只使用GtkTextView进行所有操作,但是如果你坚持使用GtkLabel进行外观,那么你的方法就像任何一样好(另一种流行的方法就是使用隐藏了标签的GtkNotebook)。
但仍需要一个可视指示来告诉用户他们可以编辑文本。也许是一个切换按钮。