Python,GTK + 3和Glade - connect_signals()不起作用

时间:2014-02-11 16:55:48

标签: python gtk3 glade

我正在尝试使用Python,GTK + 3和Glade编写GUI。在教程之后,我制作了一些代码。问题似乎是connect_signals()不起作用,因此点击按钮没有任何效果。

蟒:

from gi.repository import Gtk

class Handler:
    def onDeleteWindow(self, *args):
        Gtk.main_quit(*args)

    def onButtonPressed(self, button):
        print("Hello World!")

builder = Gtk.Builder()
builder.add_from_file("gui.glade")

builder.connect_signals(Handler())

window = builder.get_object("window1")
window.show_all()

Gtk.main()

林间空地:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">4</property>
        <child>
                <object class="GtkButton" id="button1">
                <property name="label" translatable="yes">Install</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_action_appearance">False</property>
              </object>
        </child>
      </object>
    </child>
  </object>
</interface>

1 个答案:

答案 0 :(得分:3)

您错过了gui.glade文件中的信号名称: 请参阅下面名为signal的两个标签。

参考:http://python-gtk-3-tutorial.readthedocs.org/en/latest/builder.html

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <signal name="delete-event" handler="onDeleteWindow" swapped="no"/>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">4</property>
        <child>
                <object class="GtkButton" id="button1">
                <property name="label" translatable="yes">Install</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_action_appearance">False</property>
                <signal name="pressed" handler="onButtonPressed" swapped="no"/>
              </object>
        </child>
      </object>
    </child>
  </object>
</interface>