我目前正在Python / Gtk3中编写一个在其主窗口中使用Gtk.Notebook
的应用程序。笔记本的页面选项卡都使用Gtk.Label
来显示页面名称。
我遇到了以下奇怪的行为,并想知道这是由于我的错误,还是我应该向Gtk3开发人员提交的错误。
首先,让我展示一下“可疑的”'代码:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Example without Gtk.Box")
self.set_default_size(400, 300)
self.notebook = Gtk.Notebook()
self.add(self.notebook)
self.page1 = Gtk.Label('Label 1')
self.notebook.append_page(self.page1, Gtk.Label('Page 1'))
self.page2 = Gtk.Label('Label 2')
self.notebook.append_page(self.page2, Gtk.Label('Page 2'))
self.page3 = Gtk.Label('Label 3')
self.notebook.append_page(self.page3, Gtk.Label('Page 3'))
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
此处,笔记本页面(例如self.page1
)始终是Gtk.Label
个直接附加到笔记本中的对象。
结果如下:
活跃标签的风格" Page 1"是黑色/粗体(这是正确的),标签的样式" Page 3"是灰色/粗体(再次,正确)但标签的样式" Page 2"是正常/黑色(这是错误的!)。将鼠标悬停在标签上时,标签将变为粗体,并且由于需要更多空间,因此标签标记为" Page 34"跳到右边。这可能不对。
此外,在页面选项卡标签之间随机切换几次(10 ... 20)次后,单击窗口标题将导致页面选项卡标签中的样式更改,因此再次跳转标签。
现在稍加修改的代码:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Example with Gtk.Box")
self.set_default_size(400, 300)
self.notebook = Gtk.Notebook()
self.add(self.notebook)
self.page1 = Gtk.Box()
self.page1.add(Gtk.Label('Label 1'))
self.notebook.append_page(self.page1, Gtk.Label('Page 1'))
self.page2 = Gtk.Box()
self.page2.add(Gtk.Label('Label 2'))
self.notebook.append_page(self.page2, Gtk.Label('Page 2'))
self.page3 = Gtk.Box()
self.page3.add(Gtk.Label('Label 3'))
self.notebook.append_page(self.page3, Gtk.Label('Page 3'))
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
这里唯一的区别是笔记本页面是Gtk.Box
个对象,Gtk.Label
个对象被添加到其中。
结果看起来符合预期(""" Page 3"具有相同和正确的风格):
页面内容现在左对齐,但这可能是由Gtk.Box
行为造成的,可以更改。
但是,此代码不会出现任何其他奇怪的行为。我可以随心所欲地在笔记本的各页之间随意切换。
所以第一个问题是:
我在第一个版本(我的初始版本)中犯了错误吗?据我所知,Gtk.Notebook
个对象的附加页面应该是Gtk.Widget
个对象。 Gtk.Label
和Gtk.Box
都继承自Gtk.Widget
,所以它应该没有区别(?)。
其次: 有没有人可以重现第一个附加代码示例的怪异行为?