Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4 как передать в слот-метод параметры [RSS Feed]

#1 Фев. 3, 2012 23:04:02

Immor+al
От:
Зарегистрирован: 2011-03-10
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 как передать в слот-метод параметры

Система слотов и сигналов Qt4 ломает мозг.
У меня по нажатию на ентер в QLineEdit вызывается метод addItem(self, text)
нужно как то передать туда эти два параметра, не могу понять как.

Мой код:

def createFormGroupBox(self):
global addNew
addNew = QtGui.QLineEdit()
self.connect(addNew, SIGNAL("returnPressed()"), Dialog.addItem) #TypeError: addItem() takes exactly 2 arguments (0 given)
layout.addRow(QtGui.QLabel("Add new:"), addNew)

...

class Dialog(QtGui.QDialog):
bigEditor = None
dialog = None
addNew = None

def addItem(self, text): #TypeError: addItem() takes exactly 2 arguments (0 given)
print('add ' + text)
qtItem = QtGui.QListWidgetItem(self.bigEditor)
qtItem.setText(text)

def __init__(self):
self.bigEditor = QtGui.QListWidget()
как это сделать?



Офлайн

#2 Фев. 4, 2012 06:13:31

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 как передать в слот-метод параметры

Ничего она не ломает) просто надо подойти к ней не с хвоста, а с головы)
Как я понимаю у вас тут из одного окна передаются данные в диалог?
returnPressed() не передает в функцию никаких параметров. И в этом случае нам поможет lambda

self.connect(addNew, SIGNAL("returnPressed()"), lambda: dlg.addItem(addNew.text()))
Лямбда создает безимянную функцию, которая захватывает переменные из своего окружения (dlg и addNew).
dlg - это объект класса Dialog. В питоне первым параметром при вызове метода объекта передается ссылка на этот объект (обычно self). Поскольку вы вызвали метод класса, а не объекта, то у вас self не передавался.
Лямбду использовать не обязательно (просто так красиво и я так умею:) Можно сделать dlg свойством класса и тогда написать что-то вроде
         self.connect(addNew, SIGNAL("returnPressed()"), self.rtnPressed)
def rtnPressed(self):
self.dlg.addItem(addNew.text())
Замечание глобальные переменные - зло) Постарайтесь addNew сделать свойством класса, в котором оно используется.
Второе замечание, так уже никто не пишет:
self.connect(addNew, SIGNAL("returnPressed()"), self.rtnPressed)
лучше вот так:
addNew.returnPressed.connect(self.rtnPressed)
И если есть желание покажите весь код, я так подозреваю, что могу очень много полезных замечаний по нему сделать.



Офлайн

#3 Фев. 4, 2012 09:50:55

Immor+al
От:
Зарегистрирован: 2011-03-10
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 как передать в слот-метод параметры

Спасибо!

self.connect(addNew, SIGNAL(“returnPressed()”), lambda: self.addItem(addNew.text()))
помогло, именно то, что я искал. В java\swing оно аналогичным образом делается.

Я позже покажу сорцы, когда будет что показать



Офлайн

  • Начало
  • » GUI
  • » PyQt4 как передать в слот-метод параметры[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version