2012-01-07 39 views
14

Tôi đang xây dựng một giao diện người dùng với nhà thiết kế QT và muốn các nút để thực hiện các hành động khác nhau với các công cụ sửa đổi khác nhau. Vì vậy, tôi nghĩ rằng tôi có thể gọi các hàm với các thuộc tính chuỗi động sẽ thực hiện hành động tùy thuộc vào công cụ sửa đổi.Làm thế nào để kiểm tra nếu một phím bổ trợ được nhấn (shift, ctrl, alt)?

Nếu có ai biết cách đơn giản hơn để làm điều này, tôi sẽ đánh giá cao nó rất nhiều.

+2

Xem http://stackoverflow.com/questions/3100090/howto-detect-the-modifier-key-on-mouse-click- in-qt – Tanriol

+0

Bạn có nghĩa là bạn muốn sử dụng 'MouseClick + Modifier' để chạy các lệnh? Và "thuộc tính chuỗi động" nghĩa là gì? – ekhumoro

+0

Xin chào, ý tôi là khi một người nào đó thay đổi nhấp vào một nút trong qt ui, nó thực hiện một hành động khác với nhấp chuột ctrl hoặc chỉ cần nhấp thường xuyên. – user1087058

Trả lời

33

Dường như tất cả các bạn cần làm là kiểm tra QApplication.keyboardModifiers trong xử lý nút bấm của bạn, và chọn một hành động khác nhau cho phù hợp:

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: các various modifiers có thể được OR'd cùng nhau để kiểm tra để kết hợp nhiều phím).

6

Đây là câu trả lời trễ nhưng đây là giải pháp mà tôi đã tìm thấy.

Tôi đã cố gắng để xử lý nhiều phím bấm cùng lúc (ví dụ MộtW hay WD). Giải pháp bên dưới hoạt động với nhiều phím được nhấn cùng một lúc (bao gồm Ctrl, Shift, Alt, v.v ...). Tôi hy vọng người khác có thể thấy nó hữu ích.

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 

Tới đây để thảo luận ban đầu của giải pháp này: How to get multiple key presses in single event?

Các vấn đề liên quan