Python 新的snake_案例特性在PySide6中是如何工作的?

Python 新的snake_案例特性在PySide6中是如何工作的?,python,pyside6,Python,Pyside6,我正在从PySide2第5版升级到PySide6,并说它支持snake-case方法名称,以及用属性替换getter和setter方法。这听起来是一个很大的改进,但我不知道如何实现它。发行说明中有一个代码示例,但无法运行。当我尝试将其扩展为可运行的示例时,新版本不起作用 以下是仍然适用于PySide6的旧样式: import sys from PySide6.QtWidgets import (QTableWidget, QPushButton, QVBoxLayout,

我正在从PySide2第5版升级到PySide6,并说它支持snake-case方法名称,以及用属性替换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__'
回溯(最近一次呼叫最后一次):
文件“/home/don/.config/JetBrains/PyCharm2021.1/scratches/scratch2.py”,第1行,在
从_特征_导入snake案例,true属性
ModuleNotFoundError:没有名为“”的模块

我一点也不惊讶于这种中断,
\uuuuuu特性\uuuuuu
应该从哪里来?我试着把它切换到
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。仅仅删除
\uuuu功能\uuuuu
行也不起作用。

我在看起来像原始的内容中找到了提示:

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

from __feature__ import snake_case
我错过的关键是,您必须将其放在PySide2导入之后。通过进一步的实验,我发现您必须将它放在所有其他导入之后,而不仅仅是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_())
我已经在Qt bug追踪器上查过了。