未找到处理程序

时间:2017-06-24 21:59:50

标签: python python-3.x gtk3

我最近在python3.x中创建了一个代码,对于我使用.glade文件的接口,但是当我运行代码时,解释器返回错误" AttributeError:Handler Gtk_main_quit not found&#34 ;等等代码的所有其他功能。

Python代码:

`import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk


class InverterApp():
    def __init__(self):

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

    #Obter a janela principal
        self.window = builder.get_object("window1")

    # Obtendo o widget text_entry (a área de texto do nosso programa) pois
    # iremos utiliza-la nas funções de inversão da URL e para adicionar o a
    # URL já invertida
        self.text_area = builder.get_object("text_entry")

    # Obtendo o widget about_dialog (janelinha com as informações do programa)
        self.about = builder.get_object("about_dialog")

    #Exibe a janela do programa
        self.window.show_all()

        builder.connect_signals({"gtk_main_quit": Gtk.main_quit,
                            "on_button_invert_clicked": self.invert_url,
                            "on_text_entry_activate": self.invert_url,
                            "on_copy_activate": self.copy_text,
                            "on_paste_activate": self.paste_text,
                            "on_delete_activate": self.delete_text,
                            "on_about_activate": self.about_window,
                                 })


    def invert_url(self, widget):

        url = self.text_area.get_text()

        url = url[::-1]

        self.text_area.set_text(url)

    def copy_text(self, widget):
        clipboard = Gtk.clipboard_get()

        url = self.text_area.get_text()

        clipboard.set_text(url)

        clipboard.store()


    def paste_text(self, widget):
        clipboard = Gtk.clipboard_get()

        url = clipboard.wait_for_text()

        self.text_area.set_text(url)



    def delete_text(self, widget):

        self.text_area.set_text("")

    def about_window(self, widget):

        self.about.run()
        self.about.hide()


if __name__ == "__main__":
    app = InverterApp()
    Gtk.main()`

Glade代码:

    `<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
  <requires lib="gtk+" version="3.12"/>
  <object class="GtkAboutDialog" id="about_dialog">
    <property name="width_request">320</property>
    <property name="height_request">260</property>
    <property name="can_focus">False</property>
    <property name="type">popup</property>
    <property name="resizable">False</property>
    <property name="window_position">center</property>
    <property name="type_hint">normal</property>
    <property name="program_name">Inverter</property>
    <property name="version">1.0</property>
    <property name="comments" translatable="yes">Simples Inversor
Versão 1.0</property>
    <property name="website">www.teste.com.br</property>
    <property name="website_label" translatable="yes">Licença-web</property>
    <property name="license" translatable="yes">Huehuehue</property>
    <property name="authors">Guilherme</property>
    <property name="logo">heart.png</property>
    <property name="wrap_license">True</property>
    <child internal-child="vbox">
      <object class="GtkBox" id="aboutdialog-vbox1">
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">2</property>
        <child internal-child="action_area">
          <object class="GtkButtonBox" id="aboutdialog-action_area1">
            <property name="can_focus">False</property>
            <property name="layout_style">end</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkWindow" id="window1">
    <property name="width_request">650</property>
    <property name="height_request">110</property>
    <property name="can_focus">False</property>
    <property name="title" translatable="yes">Teste</property>
    <property name="resizable">False</property>
    <property name="window_position">center</property>
    <property name="icon">heart.png</property>
    <signal name="destroy" handler="Gtk_main_quit" swapped="no"/>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkMenuBar" id="menubar1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkMenuItem" id="Editar">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">_Editar</property>
                <property name="use_underline">True</property>
                <child type="submenu">
                  <object class="GtkMenu" id="menu2">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <child>
                      <object class="GtkImageMenuItem" id="Copy">
                        <property name="label">gtk-copy</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                        <signal name="activate" handler="on_Copy_activate" swapped="no"/>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="Paste">
                        <property name="label">gtk-paste</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                        <signal name="activate" handler="on_Paste_activate" swapped="no"/>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="Delete">
                        <property name="label">gtk-delete</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                        <signal name="activate" handler="on_Delete_activate" swapped="no"/>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
            <child>
              <object class="GtkMenuItem" id="Ajuda">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Aj_uda</property>
                <property name="use_underline">True</property>
                <child type="submenu">
                  <object class="GtkMenu" id="menu3">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <child>
                      <object class="GtkImageMenuItem" id="About">
                        <property name="label">gtk-about</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                        <signal name="activate" handler="on_About_activate" swapped="no"/>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="text_entry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="text" translatable="yes">Digite a URL aqui...</property>
            <signal name="activate" handler="on_text_entry_activate" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="padding">17</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkButtonBox" id="buttonbox1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="orientation">vertical</property>
            <property name="layout_style">start</property>
            <child>
              <object class="GtkButton" id="Button_invert">
                <property name="label" translatable="yes">Inverter</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="relief">none</property>
                <signal name="clicked" handler="on_Button_invert_clicked" swapped="no"/>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>`

1 个答案:

答案 0 :(得分:0)

这个答案非常简单。您在Glade文件中有一个名为Gtk_main_quit的信号,但正在.py文件中查找gtk_main_quit的信号。似乎大多数其他字符串也不匹配。在处理字符串时务必注意你的情况。