Найти - Пользователи
Полная версия: вызов функции с параметром
Начало » GUI » вызов функции с параметром
1 2
Zubchick
ребята, я догадываюсь, что я чего-то где- то недочитал, но у меня горят сроки!
Кто-нибудь может вкратце рассказать, как повесить на кнопку вызов функции с параметром в PyQt?


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

целиком весь код, если что. Тык
truporez
как-то так
button1.clicked.connect(lambda val=12345: self.testfunc(val))
button2.clicked.connect(lambda val=54321: self.testfunc(val))
pasaranax
прикольно с лямбдой придумано :)
Zubchick
for key, value in block_dict.items():
...
button = QtGui.QPushButton()
button.setIcon(QtGui.QIcon(value.image))
button.setIconSize(QtCore.QSize(30, 30))
button.setStatusTip(value.doc)

button.clicked.connect(lambda : self.add_block(value))
При клике на кнопку вызывается add_block(value), но не с нужным value, а ВСЕГДА с последним из цикла, который прошел по словарю. ЧЯДНТ?!
truporez
я не зря написал "lambda val=54321: self.testfunc(val)"
Zubchick
то есть val должен быть жестко задан или что? Просто в таком случае, value вообще не присваивается
вот весь код
for key, value in block_dict.items():
...
button.clicked.connect(lambda val = value: self.add_block(val))
...
def add_block(self, BlockClass):
item = IBlock(QtGui.QPixmap(BlockClass.image), None, self.scene)
...


Traceback (most recent call last):
File "forms/MainForm.py", line 175, in <lambda>
button.clicked.connect(lambda val = value: self.add_block(val))
File "forms/MainForm.py", line 184, in add_block
item = IBlock(QtGui.QPixmap(BlockClass.image), None, self.scene)
AttributeError: 'bool' object has no attribute 'image'
'bool' object has no attribute ‘image’, это он как раз про переданный параметр val, который был классом, а стал почему-то bool'ом
truporez
Бррр. Кроме как влепить assert на проверку типа value перед button.clicked.connect идей нет.
Zubchick
да я делал все ок, value вообще меняется тока 1н раз в начале цикла, а при клике на кнопку берется какое-то непонятное значение. Тут Qt чего-то мутит воду, нужен кто-то кто хорошо знает его тонкости :)

целиком весь код, если что. Тык
truporez
Смотрел исходник. Почему-то не нашел вызов set_blocks.
Zubchick
он в другом модуле потому что :)
http://bitbucket.org/zubchick/madmodeller/src/77971723ddca/madmodeller.py
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB