PyGTK로 작업 중이며 GUI의 신호 (Glade를 사용하여 XML로 작성된 하나의 버튼)를 함수에 바인딩하려고하면 다음 오류가 발생합니다.
TypeError: B1() takes exactly 1 argument (2 given)
다음은 내 Python 코드입니다.
#!/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()
다음은 내 Glade 파일입니다.
<?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>
흥미로운 부분은 전달 된 인수의 수를 변경하면 오류 메시지가 다음과 같이 변경된다는 것입니다.
인수가없는 경우 :
TypeError: B1() takes no arguments (2 given)
2 개의 인수를 사용하면 오류가 발생하지 않지만 함수는 예상대로 작동하지 않습니다. 3 개 이상의 인수 포함 :
TypeError: B1() takes 3 arguments (2 given)
각 신호에는 연결된 신호 핸들러로 전달되는 특정 인수가 있습니다. 문서에서 그들이 무엇인지 확인하십시오. 예를 들어 Gtk.Button
의 clicked
신호 가 버튼 자체를 인수로받는 것을 볼 수 있습니다 .
신호 처리기의 인수 개수는 이러한 인수와 일치해야 self
하며 메서드 인 경우 포함 해야합니다. 따라서 올바른 정의 B1
는 다음과 같습니다.
def B1(self, button):
어떤 경우에는 시그널 핸들러로 전달되는 값에 대해 신경 쓰지 않을 수도 있습니다. 이 경우 다음과 같이 할 수 있습니다.
def B1(self, *args):
이것은 여기 문서에 설명 되어 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다