Как я могу сделать вкладки в закрытом Pygtk? - PullRequest
4 голосов
/ 13 января 2012

Я использую python с gtk, пытаюсь создать простой текстовый редактор с вкладками, я все еще новичок, поэтому мне интересно, как я могу сделать вкладки закрываемыми и перезаписываемыми?это намного проще в QT, но я любил GTK больше.это мой код:

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

так что мне делать?

Ответы [ 2 ]

10 голосов
/ 13 января 2012

Вместо использования gtk.Label при добавлении новой страницы к gtk.Notebook необходимо создать gtk.HBox, который содержит gtk.Label и gtk.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 от кнопки.

4 голосов
/ 15 января 2012

Чтобы сделать вкладку переставляемой, сделайте это после вашего 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()
...