Ошибка типа: метод принимает ровно 2 аргумента (дано 3)

Попытка сделать программу для мониторинга подключений usb накопителей с помощью pyudev. Вот код:

def __init__(self):
    self.window = gtk.Window()
    self.window.set_default_size(300, 300)

    self.vbox= gtk.VBox(False, 5)
    label = gtk.Label("Please plug the device")

    context = Context()
    monitor = Monitor.from_netlink(context)
    monitor.filter_by(subsystem='block',device_type='disk')
    observer = GUDevMonitorObserver(monitor)
    observer.connect("device-added",self.device_connected)
    monitor.start()

    self.vbox.pack_start(label)
    self.window.add(self.vbox)

    self.window.show_all()

def device_connected(self, device):
    self.window.remove(self.vbox)
    label = gtk.Label('{0!r} added'.format(device))
    self.vbox.pack_end(label)
    self.window.add(self.vbox)

След:

vineet@vineet:~/Documents/Project$ python project.py
TypeError: device_connected() takes exactly 2 arguments (3 given)
TypeError: device_connected() takes exactly 2 arguments (3 given)

Пожалуйста, помогите мне исправить это.

Я пытаюсь использовать кусок кода, приведенный на странице документов. Как вы заметите, device_connected Метод имеет аргументы - device_connected(observer,device) но код в этом случае тоже не работает. Он возвращает броски ту же ошибку. Но мне было интересно, как это будет работать в первую очередь. Не должен ли каждый метод класса иметь self в качестве аргумента?

1 ответ

В документах говорится, что это не методы класса, а сигналы, отправляемые этим классом. (На самом деле имя, которое используют документы, это "добавление устройства", которое даже не является допустимым именем функции в Python.)

Функция должна быть автономной, которую вы регистрируете в качестве прослушивателя для этого сигнала. Вы можете увидеть в фрагменте кода в верхней части страницы пример подключения вашего сигнала к наблюдателю.

Другие вопросы по тегам