2012-01-13 80 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