2012-01-07 24 views
14

मैं क्यूटी डिजाइनर के साथ एक यूआई का निर्माण कर रहा हूं और बटन अलग-अलग संशोधकों के साथ विभिन्न कार्यों को करने के लिए चाहता हूं। तो मैंने सोचा कि मैं गतिशील स्ट्रिंग गुणों के साथ कार्यों को कॉल कर सकता हूं जो संशोधक के आधार पर कार्रवाई करेगा।कैसे जांचें कि एक कुंजी संशोधक दबाया गया है (शिफ्ट, ctrl, alt)?

यदि कोई ऐसा करने का एक आसान तरीका जानता है तो मैं इसकी बहुत सराहना करता हूं।

+2

देखें http://stackoverflow.com/questions/3100090/howto-detect-the-modifier-key-on-mouse-click-:

def keyPressEvent(self, event): self.firstrelease = True astr = "pressed: " + str(event.key()) self.keylist.append(astr) def keyReleaseEvent(self, event): if self.firstrelease == True: self.processmultikeys(self.keylist) self.firstrelease = False del self.keylist[-1] def processmultikeys(self,keyspressed): # your logic here print keyspressed 

इस समाधान का मूल चर्चा के लिए यहां जाएं इन-क्यूटी – Tanriol

+0

क्या आपका मतलब है कि आप आदेश चलाने के लिए 'माउसक्लिक + मॉडिफायर' का उपयोग करना चाहते हैं? और "गतिशील स्ट्रिंग गुण" का क्या अर्थ है? – ekhumoro

+0

नमस्ते, मेरा मतलब था कि जब कोई व्यक्ति क्यूटी ui में एक बटन क्लिक करता है तो यह ctrl क्लिक से बस एक अलग कार्रवाई करता है या केवल नियमित क्लिक करता है। – user1087058

उत्तर

33

यह तुम सब करने की जरूरत है अपने बटन हैंडलर में QApplication.keyboardModifiers जाँच कर रहा है, और के रूप में उपयुक्त एक अलग कार्रवाई का चयन की तरह दिखता है:

from PyQt4 import QtGui, QtCore 

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.button = QtGui.QPushButton('Test', self) 
     self.button.clicked.connect(self.handleButton) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.button) 

    def handleButton(self): 
     modifiers = QtGui.QApplication.keyboardModifiers() 
     if modifiers == QtCore.Qt.ShiftModifier: 
      print('Shift+Click') 
     elif modifiers == QtCore.Qt.ControlModifier: 
      print('Control+Click') 
     elif modifiers == (QtCore.Qt.ControlModifier | 
          QtCore.Qt.ShiftModifier): 
      print('Control+Shift+Click') 
     else: 
      print('Click') 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 

(एनबी: various modifiers आदेश की जाँच करने में एक साथ OR'd किया जा सकता है बहु-कुंजी संयोजन के लिए)।

6

यह देर से उत्तर दिया गया है, लेकिन यह समाधान है जो मैंने पाया।

मैं एक ही समय (जैसे एक और डब्ल्यू या डब्ल्यू और डी) में दबाया एकाधिक कुंजियों को संभालने के लिए कोशिश कर रहा था। नीचे दिया गया समाधान एक ही समय में दबाए जा रहे एकाधिक कुंजियों के साथ काम करता है (Ctrl, शिफ्ट, Alt, आदि)। मुझे उम्मीद है कि कोई और इसे उपयोगी पा सकता है। How to get multiple key presses in single event?