pyqt: подключить сигнал динамически с предоставленными пользователем переменными? - PullRequest
1 голос
/ 04 мая 2011

Я создаю диалог с пользовательским классом:

d = ModifyRect(ctrl_name, rect_name)

Показывается немодально. Когда он принят или отклонен, я хочу вызвать функцию в моем MainWindow, передавая эти две переменные, то есть этот слот должен быть вызван:

@QtCore.pyqtSlot("QString","QString")
def modifyRectAccepted(self, ctrl_name, rect_name):
    #foo

Как мне подключить d accepted к моему MainWindow modifyRectAccepted, передав эти 2 параметра? Или даже, соедините их, но, по крайней мере, передайте экземпляр ModifyRect, чтобы я мог получить их оттуда.

в pygtk это довольно просто - вы можете передать больше переменных в connect, и они будут перенаправлены, и в любом случае передающий виджет всегда передается. Что такое эквивалентное понятие в PyQt?

1 Ответ

2 голосов
/ 04 мая 2011

Вы не можете сделать это напрямую.Вам нужно использовать сигнализатор или промежуточный слот.См. на этот вопрос ответ на несколько дней назад.

Или, если вас просто интересует источник сигнала, используйте метод sender() QObject.

РЕДАКТИРОВАТЬ: Чтобы использовать замыкания в качестве промежуточных слотов, вы должны использовать парадигму New-syle сигнала и слота.Этот способ более питоничен и позволяет указать любой вызываемый.Как это:

d = ModifyRect()

l = lambda: modifyRectAccepted(ctrl_name, rect_name)
d.accepted.connect(l)

def modifyRectAccepted(self, ctrl_name, rect_name):
    #foo
...