我正在使用带有gtk的python,尝试使用标签创建一个简单的文本编辑器,我仍然是新的,所以我想知道如何使标签可关闭和可重新排序?在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)
另一个模块“tab”有一些变量:
from launchers import *
class Tab():
def __init__(self):
self.label = gtk.Label("New Tab")
self.type = "dash"
launchers = Launchers()
self.child = launchers
所以我要做什么?
答案 0 :(得分:10)
在向gtk.Label
添加新页面时,您需要创建一个同时包含gtk.Notebook
和gtk.HBox
的{{1}},而不是使用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
...
信号。
答案 1 :(得分: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()
答案 2 :(得分:0)
这是一个小示例,展示了如何创建带有标签和on_close处理程序的笔记本:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk
class Tab():
def __init__(self, title, parent):
self.title = title
self.parent = parent
self.header = gtk.HBox()
self.title = gtk.Label(label=title)
image = gtk.Image()
image.set_from_stock(gtk.STOCK_CLOSE, gtk.IconSize.MENU)
close_button = gtk.Button()
close_button.set_image(image)
close_button.set_relief(gtk.ReliefStyle.NONE)
close_button.connect("clicked", self.on_tab_close)
self.header.pack_start(self.title,
expand=True, fill=True, padding=0)
self.header.pack_end(close_button,
expand=False, fill=False, padding=0)
self.header.show_all()
def on_tab_close(self, button):
self.parent.remove_page(self.parent.get_current_page())
class Dash(gtk.Notebook):
def new_tab(self, title):
tab = Tab(title, self)
self.sw = gtk.ScrolledWindow()
self.page = self.sw
self.page.add(gtk.Label(label=title))
self.append_page(self.page, tab.header)
d = Dash()
d.new_tab("first")
d.new_tab("second")
d.new_tab("third")
window = gtk.Window(gtk.WindowType.TOPLEVEL)
window.set_default_size(400, 400);
window.connect("destroy", gtk.main_quit)
window.add(d)
window.show_all()
gtk.main()