我需要使用gtk +的简单python-gui脚本的示例代码

时间:2019-05-06 18:10:41

标签: python-3.x gnome

我是Python和OOP的新手,需要一个示例脚本来了解gtk.builder对象和window对象之间的关系。我正在使用gnome-builder入门。

我想要的是从Builder(或Glade)生成的xml中加载gui定义:真的很简单:

具有按钮和标签的窗口。单击按钮时,标签将显示或隐藏。但是,标签(显示时)应该是连续变化的随机字母。

以下代码来自Gnome构建器hello世界,其中gui已更改为我的需求。

main.py:

s.privateMethod()

window.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.ui:

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)

1 个答案:

答案 0 :(得分:0)

我假设您正在使用Gnome构建器来构建您的应用程序。为了将处理程序连接到按钮,您应该在按钮上添加<signal name="clicked" handler="handler_name" />

http://www.learningpython.com/2006/05/07/creating-a-gui-using-pygtk-and-glade/

这是指向将pygtk与glade一起使用的教程的链接,该教程主要适用于您使用的框架

这是我的window.py文件中的代码块,该文件将VisitFaq按钮连接到其处理程序

@Gtk.Template(resource_path='/edu/umich/help/window.ui')
class HelpWindow(Gtk.ApplicationWindow):
    __gtype_name__ = 'HelpWindow'
    VisitFaq = Gtk.Template.Child()
    ChatButton = Gtk.Template.Child()
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.ChatButton.connect('clicked', self.start_chat)


    def start_chat(self):

这是VisitFaq在ui文件中的外观

<object class="GtkButton" id="VisitFaq">
                    <property name="label" translatable="yes">Visit the FAQ</property>
                    <property name="name">FaqButton</property>
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">True</property>
                    <signal name="clicked" handler="visit_faq" />
                  </object>