简体   繁体   English

pyGTK Glade警告缺少处理程序

[英]pyGTK Glade warning missing handler

i want to handle the menu click event but, this missing handler warning is occuring, where i am wrong? 我想处理菜单单击事件,但是,此错误的处理程序警告正在发生,我错了? im connecting the signal ab with handler abcd on menuitem6, on activate event, is it correct for handling a click event? 我在激活事件上将信号ab与menuitem6上的处理程序abcd连接起来,是否适合处理单击事件?
here is the error : 这是错误

abc.py:15: RuntimeWarning: missing handler 'a
bc'
builder.connect_signals({ "on_window_destroy" : gtk.main_quit })
None

here's the code : 这是代码

abc.py: abc.py:

import pygtk
pygtk.require("2.0")
import gtk

def inIta(col, cell, model, iter, mymodel):
        s = model.get_string_from_iter(iter)
        niter = mymodel.get_iter_from_string(s)
        obj = mymodel.get_value(niter, 0)
        cell.set_property('text', obj)
class TutorialApp(object):       

    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file("./tutorial.xml")
        builder.connect_signals({ "on_window_destroy" : gtk.main_quit })
        print builder.connect_signals({ "abc" : self.abcd })
        self.window = builder.get_object("window")
        self.widgets = {}
        self.widgets['disasm'] = builder.get_object('disasm')
        self.widgets['disasmw'] = builder.get_object('disassemblerWindow')
        self.widgets['regw'] = builder.get_object('regWin')
        self.widgets['stackw'] = builder.get_object('stackWin')
        self.widgets['dumpw'] = builder.get_object('dumpWin')
        self.widgets['stack'] = builder.get_object('stack')
        self.widgets['dump'] = builder.get_object('dump')
        self.widgets['registers'] = builder.get_object('registers')

        """ add columns to disasm listview"""
        rendererText = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Address", rendererText, text=0)
        self.widgets['disasmw'].append_column(column)

        rendererText = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Opcode", rendererText, text=1)
        self.widgets['disasmw'].append_column(column)

        rendererText = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Mneumonic", rendererText, text=2)
        self.widgets['disasmw'].append_column(column)

        rendererText = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Registers", rendererText, text=0)
        self.widgets['regw'].append_column(column)

        rendererText = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Stack", rendererText, text=0)
        self.widgets['stackw'].append_column(column)

        rendererText = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Dump", rendererText, text=0)
        self.widgets['dumpw'].append_column(column)


        self.widgets['disasm'].append(["alokkkkkkkkkkk","alokkkkkkkkkk","alokkkkkkkkkk"])
        self.widgets['disasm'].append(["alokkkkkkkkkkk","alokkkkkkkkkk","alokkkkkkkkkk"])
        self.widgets['disasm'].append(["alokkkkkkkkkkk","alokkkkkkkkkk","alokkkkkkkkkk"])


        self.window.show()
    def abcd(menuitem):
        print "tst"
if __name__ == "__main__":
    app = TutorialApp()
    gtk.main()

and here is the xml: 这是xml:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="2.24"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkListStore" id="disasm">
    <columns>
      <!-- column-name gchararray1 -->
      <column type="gchararray"/>
      <!-- column-name gchararray2 -->
      <column type="gchararray"/>
      <!-- column-name gchararray3 -->
      <column type="gchararray"/>
    </columns>
  </object>
  <object class="GtkListStore" id="dump"/>
  <object class="GtkListStore" id="registers"/>
  <object class="GtkListStore" id="stack"/>
  <object class="GtkWindow" id="window">
    <property name="can_focus">False</property>
    <property name="title" translatable="yes">untitled</property>
    <property name="window_position">center</property>
    <property name="default_width">440</property>
    <property name="default_height">250</property>
    <property name="icon">ico.ico</property>
    <signal name="destroy" handler="on_window_destroy" swapped="no"/>
    <child>
      <object class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkMenuBar" id="menubar">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkMenuItem" id="menuitem1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">_File</property>
                <property name="use_underline">True</property>
                <child type="submenu">
                  <object class="GtkMenu" id="menu1">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem1">
                        <property name="label">gtk-new</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem2">
                        <property name="label">gtk-open</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem3">
                        <property name="label">gtk-save</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem4">
                        <property name="label">gtk-save-as</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem5">
                        <property name="label">gtk-quit</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
            <child>
              <object class="GtkMenuItem" id="menuitem2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">_Edit</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="imagemenuitem6">
                        <property name="label">gtk-cut</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem7">
                        <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>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem8">
                        <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>
                      </object>
                    </child>
                    <child>
                      <object class="GtkImageMenuItem" id="imagemenuitem9">
                        <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>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
            <child>
              <object class="GtkMenuItem" id="menuitem3">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">_View</property>
                <property name="use_underline">True</property>
              </object>
            </child>
            <child>
              <object class="GtkMenuItem" id="menuitem5">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Options</property>
                <property name="use_underline">True</property>
                <child type="submenu">
                  <object class="GtkMenu" id="menu4">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <child>
                      <object class="GtkMenuItem" id="menuitem6">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes">Settings</property>
                        <property name="use_underline">True</property>
                        <signal name="activate" handler="abc" swapped="no"/>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
            <child>
              <object class="GtkMenuItem" id="menuitem4">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">_Help</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="imagemenuitem10">
                        <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>
                      </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="GtkHBox" id="hbox1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkTreeView" id="disassemblerWindow">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="model">disasm</property>
                <property name="enable_grid_lines">both</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkTreeView" id="regWin">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="model">registers</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkHBox" id="hbox2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkTreeView" id="dumpWin">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="model">dump</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkTreeView" id="stackWin">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="model">stack</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkStatusbar" id="statusbar">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="spacing">2</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">3</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

You can use builder.connect_signals(self) . 您可以使用builder.connect_signals(self) Then you just have to make methods that are named like the handler in your xml file. 然后,您只需要在xml文件中创建像处理程序一样命名的方法即可。 So in this case: 因此,在这种情况下:

class TutorialApp(object):
    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file('./tutorial.xml')
        builder.connect_signals(self)
        self.window = builder.get_object('disasm')
        ##rest of you __init__

    def abc(self, menuitem):
        print "tst"

    def on_window_destroy(self, window):
        gtk.main_quit()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM