2012-01-13 73 views
4

我正在使用python与gtk,试图做一个简单的文本编辑器与标签,我还是新的,所以我想知道我如何使标签可关闭和可回收?在qt中更容易,但我更喜欢gtk。这是我的代码:如何在pygtk中关闭标签?

import gtk 
from tab import * 

class Dash(gtk.Notebook): 
    def __init__(self): 
     super(gtk.Notebook,self).__init__() 
     self.defaultTab() 

    def defaultTab(self): 
     tab = Tab() 
     self.append_page(tab.child,tab.label) 

其他模块 “标签” 有一些变量:

from launchers import * 

class Tab(): 
    def __init__(self): 
     self.label = gtk.Label("New Tab") 
     self.type = "dash" 
     launchers = Launchers() 
     self.child = launchers 

所以我必须做的?

回答

10

而是附加了新的一页的时候gtk.Notebook使用gtk.Label的,你需要创建一个gtk.HBox同时包含gtk.Labelgtk.Button。或多或少,像这样:

class Dash(gtk.Notebook): 
... 
    def defaultTab(self): 
     self.append_page(tab.child,tab.header) 
... 
class Tab(): 
    def __init__(self): 
     ... 
     header = gtk.HBox() 
     title_label = gtk.Label() 
     image = gtk.Image() 
     image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) 
     close_button = gtk.Button() 
     close_button.set_image(image) 
     close_button.set_relief(gtk.RELIEF_NONE) 
     self.connect(close_button, 'clicked', self.close_cb) 

     header.pack_start(title_label, 
          expand=True, fill=True, padding=0) 
     header.pack_end(close_button, 
         expand=False, fill=False, padding=0) 
     header.show_all() 
     self.header = header 
     ... 

这只是显示关闭按钮。要真正关闭标签,您需要处理来自按钮的clicked信号。

+1

非常感谢你,它为我工作:) – emostafa 2012-01-16 02:19:15

4

为了使标签重新排序,这样做你append_page()调用后:

self.child_set_property(tab.child, 'reorderable', True) 

或:

self.set_tab_reorderable(tab.child, True) 

这里有一个简单的例子:

import gtk 

win = gtk.Window(gtk.WINDOW_TOPLEVEL) 
notebook = gtk.Notebook() 
page1 = gtk.Label('This is the first page') 
page2 = gtk.Label('This is the second page') 

notebook.append_page(page1, gtk.Label('P1')) 
notebook.append_page(page2, gtk.Label('P2')) 
notebook.props.border_width = 12 
notebook.set_tab_reorderable(page1, True) 
notebook.set_tab_reorderable(page2, True) 
win.add(notebook) 

win.connect('delete-event', gtk.main_quit) 
win.show_all() 
gtk.main() 
+0

我总是得到这个错误“第一个参数必须是一个孩子” – emostafa 2012-01-16 02:19:36

+1

你确定'tab.child'是否被首先添加到笔记本容器中? – ptomato 2012-01-16 10:33:26

+0

我试过self.set_tab_reorderable(tab,true)它工作时没有抛出错误,但是当我运行程序,我无法重新排序标签,是的,我把代码后append_page() – emostafa 2012-01-17 06:38:05