2012-01-07 23 views
14

QT tasarımcısıyla bir kullanıcı arayüzü oluşturuyorum ve farklı modifiye edicilerle farklı işlemler gerçekleştirmek için düğmeler istiyorum. Bu yüzden, değiştiriciye bağlı olarak eylemi gerçekleştirecek dinamik dize özellikleriyle işlevleri çağırabilirim diye düşündüm.Anahtar değiştiriciye basıldığında nasıl kontrol edilir (shift, ctrl, alt)?

Bunu yapmanın daha basit bir yolu bilen varsa, bunu çok takdir ediyorum.

+2

Bkz 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 

bu çözümün asıl tartışma için buraya git in-qt – Tanriol

+0

Komutları çalıştırmak için 'MouseClick + Modifier' kullanmak istediğiniz anlamına mı geliyor? Ve "dinamik dizi özellikleri" ne anlama geliyor? – ekhumoro

+0

Merhaba, Biri vardiyada bir tuşa bastığında ctrl tıklama veya sadece normal tıklamadan farklı bir eylem gerçekleştirdiğinde demek istedim. – user1087058

cevap

33

Bu sizin düğme işleyicisinde QApplication.keyboardModifiers kontrol edin ve uygun şekilde farklı bir eylem seçmek yapmanız gereken tüm benziyor:

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_()) 

(NB: denetlemek amacıyla various modifiers birlikte OR operatörüyle edilebilir çoklu tuş kombinasyonları için).

6

Bu geç cevaptır, ancak bulduğum çözüm budur.

aynı zamanda (örneğin, bir ve W veya W ve D) preslenmiş birden çok anahtar işlemek için çalışıyorum. Aşağıdaki çözüm, aynı anda birden fazla tuşa basılarak çalışır ( Ctrl, Shift, Alt, vb. Dahil). Umarım başka biri yararlı bulabilir. How to get multiple key presses in single event?

İlgili konular