QKeySequence различия между PySide и PySide2 - PullRequest
0 голосов
/ 09 декабря 2018

Поскольку я сейчас портирую приложение с графическим интерфейсом из Python 2.7.14 / PySide 1.2.4 в Python 3.7.1 / PySide2 5.11.2 Я столкнулся с несколькими проблемами с механизмом ярлыков.Более конкретно:

  • QKeySequence кажется, что инстанцирование дает разные / удивительные результаты в PySide2 по сравнению с PySide.
  • Операторы + в перечислениях Qt.Key_*, похоже, невернуть ожидаемые результаты.Например, QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Z) не работает должным образом.
  • При использовании строковых кодов для создания экземпляра QKeySequences это работает, например, QKeySequence("Shift+Ctrl+Z") кажется функциональным.
  • Создание экземпляров с QKeySequence.StandardKey вроде QKeySequence(QKeySequence.Redo) просто падает в PySide2.

Это известные ошибки?Что-то изменилось в ожидаемом использовании?Я что-то пропустил в документах ?

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 голосов
/ 09 декабря 2018

На данный момент появились два возможных обходных пути:


  • Ошибка: 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!?

...