pygtk:无法为顶级控件设置父级
我正在做一个项目,里面有一个用glade做的图形界面。
我希望主窗口分成两个部分,用一个gtk.Hpaned控件来分隔(就是水平分开的窗格)。
左边的部分想放一些按钮,像工具栏那样,可能有三个或更多按钮。
我需要的是一种方法,可以创建不同的小窗口,并把它们显示在主窗口的右边部分。这样,当我点击按钮1时,subwindow1就会出现在右边;点击按钮2时,subwindow2就会出现在右边。
我不想让窗口到处弹出,而是想把它们放到这个gtk.Hpaned控件的右边部分。
在python和pygtk中,怎么实现这个呢?
3 个回答
0
我建议你使用盒子来布局你的面板。首先,创建一个横向的盒子,这个盒子基本上就是你的主窗口:
hboxMain = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=1)
接着,创建两个竖向的盒子来作为你的面板:
vbox0 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=1)
vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=1)
然后可以在你的面板里添加你喜欢的按钮:
btn0 = Gtk.Button()
btn1 = Gtk.Button()
btn2 = Gtk.Button()
vbox0.pack_start(btn0, False, False, 1)
vbox0.pack_start(btn1, False, False, 1)
vbox0.pack_start(btn2, False, False, 1)
(在竖向盒子里,使用pack_start可以把你指定的子组件(上面的btnN)添加到盒子的顶部,然后继续往下添加,只要你继续调用pack_start。横向盒子则是从左到右添加。)
最后,把你的竖向盒子添加到主横向盒子里,最终再把横向盒子添加到你的主窗口。
hboxMain.pack_start(vbox0, False, False, 1)
hboxMain.pack_start(vbox1, False, False, 1)
win = Gtk.Window(title="Home")
win.add(hboxMain)
win.show_all()
听起来你想在右侧的盒子里添加窗口组件。我不能确定这是否可行,因为我认为窗口更像是一个高级的容器。我觉得在右侧的盒子里放一些文本框之类的会更合适。不太明白你为什么想添加一个窗口组件。你可以试试看。
0
与其创建多个窗口,不如在右侧放一个笔记本。然后把之前的所有窗口都当作笔记本里的页面。点击按钮时,就可以在笔记本中显示相应的页面。
2
你试过这个吗?
gtk.Widget.reparent(new_parent)
reparent() 方法可以把一个小部件从一个 gtk.Container 移动到另一个地方。