2013-04-01 2 views
0

Я пытаюсь понять сигналы и слоты ....Определяющий сигнал снаружи __init__ класса не работает?

прочитал пару вещей

http://www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-more/#custom

http://zetcode.com/tutorials/pyqt4/eventsandsignals/

и вот вопрос:

class bla(object): 
    blaSignal = QtCore.pyqtSignal() 

работает, но

класс бла (объект):

def __init__(self): 
    self.blaSignal = QtCore.pyqtSignal() 

не работает, и в нем говорится что-то о сигнале не связан ... Что я не понимаю здесь? Почему он работает?

Благодаря

+1

Пожалуйста, объясните, что именно означает «не работает», и покажите точную ошибку (с трассировкой), а не просто «что-то о том, что сигнал не связан». – abarnert

+0

Я предполагаю, что вы понимаете основную разницу между атрибутами класса и атрибутами экземпляра и просто хотите знать, почему сигналы должны быть атрибутами класса. Если вы тоже не понимаете первую часть, есть еще что ответить ... – abarnert

+0

да Я понимаю основную разницу, но, вероятно, едва ли что ... тоже читаю на этом сейчас – evan54

ответ

2

Проблема здесь состоит в том, что вы хотите там быть один сигнал, который разделяется всеми bla объектами.

Если у вас есть другой сигнал для каждого bla, никто не сможет подключить какой-либо сигнал, не зная о конкретном экземпляре bla, которому принадлежит конкретный сигнал. Это было бы неплохо в рамках программы, но представьте себе, как бы обработала что-то вроде QtDesigner или основанная на QMetaObject интроспекция. Даже если он создал экземпляр bla, это не будет то же самое, что и ваш код, созданный во время выполнения.

Это несколько поясняется в документах Defining New Signals with pyqtSignal().

+0

ОК, в большинстве случаев это имеет смысл. Итак, в принципе, если две кнопки были класса bla, и я нажал один из них, оба излучали бы сигнал? – evan54

+0

ok глупый вопрос забудьте об этом ... спасибо! – evan54