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

2024-09-25 00:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从PySide2版本5升级到PySide6,release notes表示它支持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__'

我一点也不奇怪,那该死的__feature__应该从哪里来?我试着把它切换到__future__,但也没用。仅仅删除__feature__行也不起作用


Tags: fromimport版本systablebuttonwidgetfeature
1条回答
网友
1楼 · 发布于 2024-09-25 00:27:07

我在原版feature description中找到了提示:

The decision depends of the following setting at the beginning of a module after PySide2 import:

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_())

相关问题 更多 >