2016-12-09 15 views
0

私はPyGTKで作業しています.GUIのシグナル(関数Gladeを使ってXMLで書かれたボタンの1つ)をバインドしようとすると、次のエラー:pygtk - B1()は引数が1つしかありません(与えられた2つ)

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.20.0 --> 
<interface> 
    <requires lib="gtk+" version="3.20"/> 
    <object class="GtkWindow" id="GW1"> 
    <property name="visible">True</property> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkBox" id="GB1"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <property name="orientation">vertical</property> 
     <child> 
      <object class="GtkButton" id="B1"> 
      <property name="label" translatable="yes">button</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <signal name="clicked" handler="on_B1_clicked" swapped="no"/> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">0</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="B2"> 
      <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> 
      <object class="GtkButton" id="B3"> 
      <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">2</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    <child> 
     <placeholder/> 
    </child> 
    </object> 
</interface> 

興味深いP:

ここ
#!/usr/bin/python2 

import pygtk 
pygtk.require('2.0') 
from gi.repository import Gtk as gtk 

class Main(): 
    def __init__(self): 
     self.builder = gtk.Builder() 
     self.builder.add_from_file('/home/jatin/button.glade') 
     self.MainWindow = self.builder.get_object('GW1') 
     if self.MainWindow: 
      self.MainWindow.connect("destroy", gtk.main_quit) 

     dic = { 
      'on_B1_clicked' : self.B1, 
      'on_B2_clicked' : self.B2, 
      'on_B3_clicked' : self.B3 
     } 
     self.builder.connect_signals(dic) 
    def B1(self): 
     return('ham') 

    def B2(self): 
     return('ham') 

    def B3(self): 
     return('ham') 


M = Main() 
gtk.main() 

は私のグレイドファイルである:ここでは

TypeError: B1() takes exactly 1 argument (2 given) 

は私のPythonコードであります

ゼロで引数:芸術は、私は渡されたargumetsの数を変更した場合、エラーメッセージは次のように変化することである

TypeError: B1() takes no arguments (2 given) 

私はエラーを取得していないが、機能は行いません2つの引数をどのようにそれはそうなっている。 3つ以上の引数で:

TypeError: B1() takes 3 arguments (2 given) 
+0

いいえ。ごめんなさい。私は次回それをやるでしょう。何が間違っているのかについてのアイデア? –

+0

私はあなたが使っているライブラリについて聞いたことがありません。 'B1'はどこに呼び出されていますか?私はあなたのメソッドが暗黙の 'self'sを取るに過ぎないのに、ライブラリが明示的な引数を渡そうとしていると思われます。 – Carcigenicate

+0

これはGUIライブラリです。 Linuxの場合は、XMLファイルをbutton.glade、pythonファイルをbutton.pyとして保存し、3つのボタンを含むウィンドウを起動します。ここでは、ボタン1が押されたとき(B1というラベルが付いているとき)、B1という関数を実行すると定義しています。 –

答えて

0

各信号には、接続された信号ハンドラに渡される特定の引数があります。ドキュメントの内容を見て、その内容を確認してください。たとえば、Gtk.Button's clicked signalがボタン自体を引数として受け取ることがわかります。

シグナルハンドラの引数の数は、これらの引数と一致している必要があり、メソッドの場合はselfが含まれている必要があります。だから、B1のための正しい定義は次のようになります。

def B1(self, button): 

あなたが本当にシグナルハンドラに渡される値を気にしないかもしれないいくつかのケースでは。これは、ドキュメントでhereを説明されて

def B1(self, *args): 

:その場合は、次のような何かを行うことができます。

関連する問題