首页 文章

QKeySequence PySide和PySide2之间的差异

提问于
浏览
0

因为我目前正在将Python 2.7.14 / PySide 1.2.4中的gui应用程序移植到Python 3.7.1 / PySide2 5.11.2我遇到了一些快捷机制的问题 . 进一步来说:

与PySide相比,PySide2中的

  • QKeySequence instantiation似乎返回了不同/令人惊讶的结果 .

  • Qt.Key_* 枚举上的 + 运算符似乎没有返回预期结果 . 例如 QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z) 似乎无法正常工作 .

  • 当使用字符串代码实例化 QKeySequences 时,它起作用,例如 QKeySequence("Shift+Ctrl+Z") 似乎有效 .

  • QKeySequence.StandardKey 实例化如 QKeySequence(QKeySequence.Redo) 只是在PySide2中崩溃 .

这些已知的错误?预期用途有什么变化吗?我错过了something in the docs吗?

Win7x64 / Python 3.7.1 / PySide2 5.11.2(失效/崩溃)


# -*- coding: utf-8 -*-
"""Test QKeySequence equality/matching in PySide2."""
from PySide2.QtCore import Qt
from PySide2.QtGui import QKeySequence

sequence_a = QKeySequence("Shift+Ctrl+Z")
sequence_b = QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z)

# string representation
print(sequence_a.toString())
print(sequence_b.toString())

print("-"*20)

# equality/matching
print(sequence_a.matches(sequence_b))
print(sequence_a == sequence_b)

print("-"*20)

# this causes a crash in PySide2 (Process finished with exit code -1073741819 (0xC0000005))
print(QKeySequence(QKeySequence.Redo))

# Ctrl+Shift+Z
# [
# --------------------
# PySide2.QtGui.QKeySequence.SequenceMatch.NoMatch
# False
# --------------------
# Process finished with exit code -1073741819 (0xC0000005)

Win7x64 / Python 2.7.14 / PySide 1.2.4(正常工作)


# -*- coding: utf-8 -*-
"""Test QKeySequence equality/matching in PySide."""
from PySide.QtCore import Qt
from PySide.QtGui import QKeySequence

sequence_a = QKeySequence("Shift+Ctrl+Z")
sequence_b = QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z)

# string representation
print(sequence_a.toString())
print(sequence_b.toString())

print("-"*20)

# equality/matching
print(sequence_a.matches(sequence_b))
print(sequence_a == sequence_b)

print("-"*20)

# this works in PySide
print(QKeySequence(QKeySequence.Redo))

# Ctrl+Shift+Z
# Ctrl+Shift+Z
# --------------------
# PySide.QtGui.QKeySequence.SequenceMatch.ExactMatch
# True
# --------------------
# PySide.QtGui.QKeySequence(67108953, 0, 0, 0)

1 回答

  • 0

    至于现在,出现了两种可能的解决方法:


    • Error: QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z).toString() - > "["

    • Fix with enforced precedence: QKeySequence(Qt.SHIFT + (Qt.CTRL + Qt.Key_Z)).toString() - > "Ctrl+Shift+Z"

    • Fix with bitwise or operator: QKeySequence(Qt.ShiftModifier | Qt.CTRL | Qt.Key_Z).toString() - > "Ctrl+Shift+Z"

    虽然他们似乎解决了眼前的直接问题,但我并不认为它们因各种原因而变得非常棒 . 一般问题可能仍然可能属于PySide2错误!?

相关问题