TypeError: accept missing 2 требуемых аргумента (все еще функциональный)

Это вопрос любопытства. У меня есть блок кода, который выполняется на accept.connect (). Он выдает эту ошибку, но когда я проверяю результаты, они все еще работают. И из того, что я понимаю из окна кнопок: после нажатия OK или отмены, диалог должен закрыться на своем собственном. Я даже не инициализировал self.buttonBox.canceled.connect, но когда я нажимаю отменить, окно закрывается. Когда я нажимаю OK, хотя окно остается открытым и дает следующую ошибку:

TypeError: accept() missing 2 required positional arguments: 'player' and 'window' 

Итак, вот какой код:

 class UIinit(QtGui.QDialog, UI.Buy_Cargo.Ui_Dialog): """The Dialog for initiation""" def __init__(self, player, window): super(UIinit, self).__init__() self.window = window self.player = player self.setupUi(self) #for i in Config.port_prices: # up = getattr(self, "btn_" + i + "_up") # up.clicked.connect(partial(self.up, i, player)) # down = getattr(self, "btn_" + i + "_down") # down.clicked.connect(partial(self.down, i)) # add_price = getattr(self, "H_" + i) # add_price.setText(i + # " (" + str(self.player.port.price[i]) + ")") self.buttonBox.accepted.connect( # the important part partial(self.accept, player, window)) def accept(self, player, window): if int(self.V_Total.text()) <= player.money: for i in player.ship.cargo: num = int(getattr(self, "V_" + i).text()) player.ship.cargo[i] += num window.to_shipyard() dia = UIinit(player, window) dia.exec_() 

Я попытался подключиться (лямбда: self.accept (плеер, окно)) и использовать self.player и self.window в качестве аргументов.

2 Solutions collect form web for “TypeError: accept missing 2 требуемых аргумента (все еще функциональный)”

Эти упрощенные фрагменты ниже работают так, как ожидалось, поэтому ваша проблема находится в другом месте. Просто дикая игра – если вы копируете / вставляете код, в нем есть вкладки, и если у вас есть сочетание вкладок и пробелов, вы можете получить действительно странные результаты – например, если def accept фактически определяется самим __init__ , а не является правильным методом , в этом случае self не передается self функции. Не соответствует вашему сообщению об ошибке, но это может стоить проверить ….

 from functools import partial class Button(object): def __init__(self): self.callbacks = [] def connect(self, callback): self.callbacks.append(callback) def click(self): for callback in self.callbacks: callback() class UI(object): """The Dialog for initiation""" def __init__(self, player, window): self.window = window self.player = player self.button = Button() self.button.connect( # the important part partial(self.accept, player, window)) self.button.connect( lambda: self.accept(player, window)) def accept(self, player, window): print "accept %s %s" % (player, window) def exec_(self): self.button.click() player = "p" window = "w" dia = UI(player, window) dia.exec_() 

Кажется, что это связано с тем, что я переписываю функцию принятия диалога. Как только я сменил accept () на GoNinjaGoNinjaGo (), все работало нормально.

  • Невозможно очистить конкретную таблицу с помощью BeautifulSoup4 (Python 3)
  • Почему скобка напечатана в Python 2.7?
  • defaultdict не определен
  • Должен ли я изучать Python 3 или 2.x?
  • Python 3.3 и установка PyOpenSSL на Mac
  • Не удается определить, как работает String Substitution в Python 3.x
  • falcon, AttributeError: объект API не имеет атрибута 'create'
  • Pandas groupby применяют медленные действия
  • Python - лучший язык программирования в мире.