Найти - Пользователи
Полная версия: PyQt4 как передать в слот-метод параметры
Начало » GUI » PyQt4 как передать в слот-метод параметры
1
Immor+al
Система слотов и сигналов 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()
как это сделать?
dartNNN
Ничего она не ломает) просто надо подойти к ней не с хвоста, а с головы)
Как я понимаю у вас тут из одного окна передаются данные в диалог?
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)
И если есть желание покажите весь код, я так подозреваю, что могу очень много полезных замечаний по нему сделать.
Immor+al
Спасибо!

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

Я позже покажу сорцы, когда будет что показать
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