2014-12-12 4 views
0

Я связываю 2 клавиши для вызова двух методов моего класса. Можно ли вызвать какой-то метод и узнать, какая клавиша была нажата?Как получить последовательность клавиш после отправки СИГНАЛА

def initGui(self): 
    self.keyAction = QAction("Test Plugin", self.iface.mainWindow()) 
    self.iface.registerMainWindowAction(self.keyAction, self.toggle_key_1) 
    self.iface.addPluginToMenu("&Test plugins", self.keyAction) 
    QObject.connect(self.keyAction, SIGNAL("triggered()"), self.toogle_layer_1) 

    self.keyAction = QAction("Test Plugin", self.iface.mainWindow()) 
    self.iface.registerMainWindowAction(self.keyAction, self.toggle_key_2) 
    self.iface.addPluginToMenu("&Test plugins", self.keyAction) 
    QObject.connect(self.keyAction, SIGNAL("triggered()"), self.toogle_layer_2) 

ответ

2

Да, вы можете узнать, какой объект вызвал сигнал от слота (функции) с помощью QObject::sender() функции. Как Qt docs говорят:

Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. The pointer is valid only during the execution of the slot that calls this function from this object's thread context.

Update:

Например, в слоте вы можете написать:

def toogle_layer(self): 
    action = QtCore.QObject.sender() 

    if action == self.action1: 
     # do something 
    elif action == self.action2: 
     # do something else 
+0

Я пробовал так: QObject :: отправителем() и получил ошибка синтаксиса. – gustavgans

+0

@gustavgans, конечно, потому что это синтаксис C++. Вместо этого вы должны использовать синтаксис Python. Может быть, 'QtCore.QObject.sender()' будет работать? – vahancho

+0

Я попробовал это, как вы предлагаете, но получите AttributeError: xxx экземпляр не имеет атрибута 'sender'. В любом случае спасибо, что я узнаю :) – gustavgans

Смежные вопросы