【发布时间】:2019-05-06 18:10:40
【问题描述】:
我是 Python 和 OOP 的新手,需要一个示例脚本来了解 gtk.builder 对象和窗口对象之间的关系。我正在使用 gnome-builder 开始。
我想要的是从 xml 加载由 builder(或 Glade)生成的 gui 定义:真的很简单:
窗口有一个按钮和一个标签。单击按钮时,标签将切换为显示或隐藏。但是,标签(显示时)应该是一个不断变化的随机字母。
以下代码来自 Gnome builder hello world,其中 gui 已更改为我的需要。
main.py:
import sys
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio
from .window import TestWindow
class Application(Gtk.Application):
def __init__(self):
super().__init__(application_id='test',
flags=Gio.ApplicationFlags.FLAGS_NONE)
def do_activate(self):
win = self.props.active_window
if not win:
win = TestWindow(application=self)
win.present()
def main(version):
app = Application()
return app.run(sys.argv)
window.py:
from gi.repository import Gtk
@Gtk.Template(resource_path='/test/window.ui')
class TestWindow(Gtk.ApplicationWindow):
__gtype_name__ = 'TestWindow'
label = Gtk.Template.Child()
def __init__(self, **kwargs):
super().__init__(**kwargs)
window.ui:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<template class="TestWindow" parent="GtkApplicationWindow">
<property name="can_focus">False</property>
<property name="default_width">600</property>
<property name="default_height">300</property>
<child type="titlebar">
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</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>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</template>
</interface>
【问题讨论】:
-
python gtk 有一些合理的教程,您可以查看这些教程以组合您需要的内容。 python-gtk-3-tutorial.readthedocs.io/en/latest/…
-
您所展示的代码究竟是什么“示例代码”不够?
-
谢谢 jonyfries -- 我马上去看看
-
mkrieger1:上面的代码没有引用来自 gui 按钮的点击信号,我无法弄清楚它应该去哪里......更根本的是为什么它应该去它应该去的地方去...我的大脑并没有真正“点击”进入 OOP 的思维方式,我猜。
-
感谢您发布问题。我有同样的问题。上面的示例代码没有显示如何连接信号。我花了几个小时才找到这些信息。
标签: python-3.x gnome