Только Key_Tab & ShiftModifier не работает хорошо с PySide - PullRequest
0 голосов
/ 14 января 2019

Pre

Я искал другие Вопросы и не мог найти решение.


Я хочу выполнить клавишу Tab и операцию Shift одновременно, потому что я хочу добавить новое исполнение, нажав клавишу Tab. Я знаю, что перечисление Shiftmodifier хорошо. Но это не работает, когда клавиша - это клавиша Tab. Знаете ли вы, как ее контролировать? С другой стороны, Controlmodifier работает хорошо.

Когда я нажал клавишу Tab

tab only

Когда я нажал клавишу Tab & Control

tab & Control

Когда я нажимал любую клавишу, кроме клавиши Tab & Shift

print("tab & any key except for tab key")

Когда я нажал клавишу Tab & Shift

Нет ответа ... Почему?

Пример кода

from PySide import QtGui
from PySide import QtCore
import sys

class TSEditer(QtGui.QTextEdit):
    def __init__(self,parent=None):
        super(TSEditer,self).__init__(parent=None)

    def keyPressEvent(self,event):


        if event.key() == QtCore.Qt.Key_Tab and event.modifiers() == QtCore.Qt.ControlModifier:
            print("tab & control")
        elif event.key() == QtCore.Qt.Key_Tab and event.modifiers() == QtCore.Qt.ShiftModifier:
            print("tab & shift")
        elif event.key() == QtCore.Qt.Key_A and event.modifiers() == QtCore.Qt.ShiftModifier :
            print("tab & any key except for tab key")
        elif event.key() == QtCore.Qt.Key_Tab:
            print("tab only")

        return QtGui.QTextEdit.keyPressEvent(self,event)

def main():
    try:
        QtGui.QApplication([])
    except Exception as e:
        print(15,e)
    ts = TSEditer()
    ts.show()
    sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
    main()

1 Ответ

0 голосов
/ 17 января 2019

Вы должны искать значение event.key().

def keyPressEvent(self,event):
    print(event.key())

и значение 16777218, когда я нажимаю клавиши Shift и Tab.

Так что вы можете сделать это, написав свой код следующим образом.

От:

def keyPressEvent(self,event):
    if event.key() == QtCore.Qt.Key_Tab and event.modifiers() == QtCore.Qt.ShiftModifier:
       #Code

До:

def keyPressEvent(self,event):
    if event.key() == 16777218:
       #Code

Возможно, есть ошибка. 16777218 означает, что key_shift и key_tab нажаты. Вы можете сделать то же самое.

...