3

我正在从 PySide2 版本 5 升级到 PySide6,发行说明说它支持蛇形方法名称以及用属性替换 getter 和 setter 方法。这听起来像是一个很大的改进,但我不知道如何启用它。发行说明有一个代码示例,但它不可运行。当我尝试将其扩展为可运行的示例时,新版本不起作用。

这是仍然适用于 PySide6 的旧样式:

import sys
from PySide6.QtWidgets import (QTableWidget, QPushButton, QVBoxLayout,
                               QApplication, QWidget)


class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        table = QTableWidget()
        table.setColumnCount(2)

        button = QPushButton("Add")
        button.setEnabled(False)

        layout = QVBoxLayout(self)
        layout.addWidget(table)
        layout.addWidget(button)


if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec_())

这是不起作用的新版本:

from __feature__ import snake_case, true_property

import sys
from PySide6.QtWidgets import (QTableWidget, QPushButton, QVBoxLayout,
                               QApplication, QWidget)


class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        table = QTableWidget()
        table.column_count = 2

        button = QPushButton("Add")
        button.enabled = False

        layout = QVBoxLayout(self)
        layout.add_widget(table)
        layout.add_widget(button)


if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec_())

当我运行新版本时,我收到此错误:

Traceback (most recent call last):
File "/home/don/.config/JetBrains/PyCharm2021.1/scratches/scratch2.py", line 1, in <module>
from __feature__ import snake_case, true_property
ModuleNotFoundError: No module named '__feature__'

我并不感到惊讶,这到底是__feature__从哪里来的?我尝试将其切换到__future__,但这也不起作用。只是删除__feature__线也不起作用。

4

1 回答 1

5

我在看起来像原始功能描述的地方找到了提示:

该决定取决于 PySide2 导入后模块开头的以下设置:

from __feature__ import snake_case

我错过的关键是你必须把它放在 PySide2 import 之后。通过进一步的实验,我发现你必须将它放在所有其他导入之后,而不仅仅是 PySide6。以后的任何导入都将重置功能标志。

当我移动那条线时,新版本就起作用了。不过,我的 IDE 讨厌它,所以我必须关闭该行的验证:

import sys
from PySide6.QtWidgets import (QTableWidget, QPushButton, QVBoxLayout,
                               QApplication, QWidget)

# noinspection PyUnresolvedReferences
from __feature__ import snake_case, true_property


class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        table = QTableWidget()
        table.column_count = 2

        button = QPushButton("Add")
        button.enabled = False

        layout = QVBoxLayout(self)
        layout.add_widget(table)
        layout.add_widget(button)


if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec_())
于 2021-04-22T04:44:41.680 回答