【问题标题】:How does the new snake_case feature work in PySide6?PySide6 中的新蛇案例功能如何工作?
【发布时间】:2021-07-16 07:12:47
【问题描述】:

我正在从 PySide2 版本 5 升级到 PySide6,release notes 说它支持蛇形方法名称以及用属性替换 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__ 行也不起作用。

【问题讨论】:

  • 我已经 raised an issue 在 Qt 错误跟踪器上讨论过这个问题。

标签: python pyside6


【解决方案1】:

我在看起来像原来的feature description 中找到了提示:

决定取决于开头的以下设置 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_())

【讨论】:

  • 添加此导入后,您的 IDE 是否会自动完成蛇案例名称?
  • 我不记得了,@Leogout,但我认为它没有。
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 2019-10-30
  • 1970-01-01
  • 2019-05-24
  • 2020-12-08
相关资源
最近更新 更多