【发布时间】:2019-08-10 14:06:10
【问题描述】:
我想编写一个有一个主窗口的程序,如果我点击一个按钮,它会改变窗口的内容(或类似的东西),然后用户可以返回到“主页”。 我在 Ubuntu 19.04 上使用 python3、gtk3 和 glade。
这是 example.glade XML 文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkApplicationWindow" id="main">
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButton" id="button">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
</child>
</object>
</interface>
这是 Python3 文件
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
import os
os.chdir('/home/sources')
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class app:
def __init__(self):
self.gladefile = 'example.glade'
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object('main')
elf.window = self.builder.get_object('button')
self.window.show()
if __name__ == '__main__':
main = app()
Gtk.main()
我想在按下按钮时将窗口(但在同一个窗口中)更改为此
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkApplicationWindow" id="main">
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkNotebook" id="notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkButton" id="but1">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">page 1</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but2">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">page 2</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but3">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">page 3</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
【问题讨论】:
-
向我们展示您已经拥有的代码,这样我们就不必重复您的工作了。
-
另请阅读MCVE
-
我上传了一个例子,但它真的什么也没做,所以它可能不会有太大帮助。不过我也写了我想做的概念,也许会有所帮助。
-
还有一个类似的问题,它有一个答案,但我想知道 GtkAssistant 如何在运行时更改窗口内容。 stackoverflow.com/questions/4361364/…
-
如果您需要有关 Gtk.Assistant 的具体帮助,请发布另一个问题。我的回答是我认为对您提出的问题的最佳回答。
标签: linux python-3.x gtk3