首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QKeySequence在PySide和PySide2中的差异

QKeySequence在PySide和PySide2中的差异
EN

Stack Overflow用户
提问于 2018-12-08 21:44:10
回答 1查看 1.1K关注 0票数 0

由于我目前正在将gui应用程序从Python2.7.14/PySide1.2.4移植到Python3.7.1/PySide25.11.2,所以我遇到了快捷机制方面的一些问题。更具体而言:

  • QKeySequence实例化似乎在PySide2中返回与PySide不同的/令人惊讶的结果。
  • +操作符在Qt.Key_*枚举上似乎没有返回预期的结果。例如,QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z)似乎不能正常工作。
  • 当使用字符串代码实例化QKeySequences时,它可以工作,例如,QKeySequence("Shift+Ctrl+Z")看起来很实用。
  • 使用类似于QKeySequence.StandardKeyQKeySequence(QKeySequence.Redo)实例化简单地在PySide2中崩溃。

这些是已知的虫子吗?预期的使用有什么变化吗?我想念文档里的东西吗?

Win7x64/Python3.7.1/PySide25.11.2(失灵/崩溃)

代码语言:javascript
复制
# -*- 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/Python2.7.14/PySide 1.2.4 (工作)

代码语言:javascript
复制
# -*- 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)
EN

回答 1

Stack Overflow用户

发布于 2018-12-08 23:32:34

就目前而言,出现了两个可能的解决办法:

  • 错误: QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z).toString() -> "["
  • 具有强制优先级的修补程序: QKeySequence(Qt.SHIFT + (Qt.CTRL + Qt.Key_Z)).toString() -> "Ctrl+Shift+Z"
  • 按位或运算符的修正: QKeySequence(Qt.ShiftModifier | Qt.CTRL | Qt.Key_Z).toString() -> "Ctrl+Shift+Z"

虽然他们似乎解决了眼前的直接问题,但由于种种原因,我并不认为他们那么伟大。一般的问题可能仍然可以被称为PySide2 bug!?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53687265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档