pygtk:无法为顶级控件设置父级

2 投票
3 回答
1820 浏览
提问于 2025-04-15 17:40

我正在做一个项目,里面有一个用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 移动到另一个地方。

撰写回答