From cd2d96063aa2b324893a3e218b6424ec40b032b3 Mon Sep 17 00:00:00 2001 From: muzing Date: Sat, 12 Aug 2023 23:01:00 +0800 Subject: [PATCH 01/13] Usual update --- README.md | 2 +- poetry.lock | 470 ++++++++++++++++++++++++++++++++++--------------- pyproject.toml | 18 +- 3 files changed, 342 insertions(+), 148 deletions(-) diff --git a/README.md b/README.md index 2ad490f..8ebf439 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ - 在自己的机器上实际运行一下,仔细观察一下每个属性值的改变会怎样影响控件的外观行为,可能比静态的文档教程更有效 - 前身为 GitHub 热度最高的中文 PyQt5 教程 [PyQt-Practice](https://github.com/muziing/PyQt_practice),目前已有 ![PyQt-Practice Stars](https://img.shields.io/github/stars/muziing/PyQt_practice.svg) 个 Stars - 相比 [PyQt-Practice](https://github.com/muziing/PyQt_practice),改进了项目目录结构,增加了部分内容,更加清晰丰富 -- 使用最新的 Python 与 PySide 版本(目前为`3.10`与`6.4`) +- 使用最新的 Python 与 PySide 版本(目前为`3.11`与`6.5`) 希望本项目对你我的 Python-GUI 学习之旅有所帮助。 diff --git a/poetry.lock b/poetry.lock index b2457ac..7c972c6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,38 +1,34 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] @@ -53,18 +49,33 @@ uvloop = ["uvloop (>=0.15.2)"] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -73,13 +84,12 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -90,13 +100,67 @@ files = [ [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" + +[[package]] +name = "identify" +version = "2.5.26" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, + {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, +] + +[package.extras] +license = ["ukkonen"] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" [[package]] name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -113,65 +177,58 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "mypy" -version = "1.2.0" +version = "1.5.0" description = "Optional static typing for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mypy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:701189408b460a2ff42b984e6bd45c3f41f0ac9f5f58b8873bbedc511900086d"}, - {file = "mypy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe91be1c51c90e2afe6827601ca14353bbf3953f343c2129fa1e247d55fd95ba"}, - {file = "mypy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d26b513225ffd3eacece727f4387bdce6469192ef029ca9dd469940158bc89e"}, - {file = "mypy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a2d219775a120581a0ae8ca392b31f238d452729adbcb6892fa89688cb8306a"}, - {file = "mypy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:2e93a8a553e0394b26c4ca683923b85a69f7ccdc0139e6acd1354cc884fe0128"}, - {file = "mypy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3efde4af6f2d3ccf58ae825495dbb8d74abd6d176ee686ce2ab19bd025273f41"}, - {file = "mypy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:695c45cea7e8abb6f088a34a6034b1d273122e5530aeebb9c09626cea6dca4cb"}, - {file = "mypy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0e9464a0af6715852267bf29c9553e4555b61f5904a4fc538547a4d67617937"}, - {file = "mypy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8293a216e902ac12779eb7a08f2bc39ec6c878d7c6025aa59464e0c4c16f7eb9"}, - {file = "mypy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:f46af8d162f3d470d8ffc997aaf7a269996d205f9d746124a179d3abe05ac602"}, - {file = "mypy-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:031fc69c9a7e12bcc5660b74122ed84b3f1c505e762cc4296884096c6d8ee140"}, - {file = "mypy-1.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:390bc685ec209ada4e9d35068ac6988c60160b2b703072d2850457b62499e336"}, - {file = "mypy-1.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4b41412df69ec06ab141808d12e0bf2823717b1c363bd77b4c0820feaa37249e"}, - {file = "mypy-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e4a682b3f2489d218751981639cffc4e281d548f9d517addfd5a2917ac78119"}, - {file = "mypy-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a197ad3a774f8e74f21e428f0de7f60ad26a8d23437b69638aac2764d1e06a6a"}, - {file = "mypy-1.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9a084bce1061e55cdc0493a2ad890375af359c766b8ac311ac8120d3a472950"}, - {file = "mypy-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaeaa0888b7f3ccb7bcd40b50497ca30923dba14f385bde4af78fac713d6d6f6"}, - {file = "mypy-1.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bea55fc25b96c53affab852ad94bf111a3083bc1d8b0c76a61dd101d8a388cf5"}, - {file = "mypy-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:4c8d8c6b80aa4a1689f2a179d31d86ae1367ea4a12855cc13aa3ba24bb36b2d8"}, - {file = "mypy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70894c5345bea98321a2fe84df35f43ee7bb0feec117a71420c60459fc3e1eed"}, - {file = "mypy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4a99fe1768925e4a139aace8f3fb66db3576ee1c30b9c0f70f744ead7e329c9f"}, - {file = "mypy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023fe9e618182ca6317ae89833ba422c411469156b690fde6a315ad10695a521"}, - {file = "mypy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d19f1a239d59f10fdc31263d48b7937c585810288376671eaf75380b074f238"}, - {file = "mypy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:2de7babe398cb7a85ac7f1fd5c42f396c215ab3eff731b4d761d68d0f6a80f48"}, - {file = "mypy-1.2.0-py3-none-any.whl", hash = "sha256:d8e9187bfcd5ffedbe87403195e1fc340189a68463903c39e2b63307c9fa0394"}, - {file = "mypy-1.2.0.tar.gz", hash = "sha256:f70a40410d774ae23fcb4afbbeca652905a04de7948eaf0b1789c8d1426b72d1"}, + {file = "mypy-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad3109bec37cc33654de8db30fe8ff3a1bb57ea65144167d68185e6dced9868d"}, + {file = "mypy-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b4ea3a0241cb005b0ccdbd318fb99619b21ae51bcf1660b95fc22e0e7d3ba4a1"}, + {file = "mypy-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fe816e26e676c1311b9e04fd576543b873576d39439f7c24c8e5c7728391ecf"}, + {file = "mypy-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42170e68adb1603ccdc55a30068f72bcfcde2ce650188e4c1b2a93018b826735"}, + {file = "mypy-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d145b81a8214687cfc1f85c03663a5bbe736777410e5580e54d526e7e904f564"}, + {file = "mypy-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c36011320e452eb30bec38b9fd3ba20569dc9545d7d4540d967f3ea1fab9c374"}, + {file = "mypy-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3940cf5845b2512b3ab95463198b0cdf87975dfd17fdcc6ce9709a9abe09e69"}, + {file = "mypy-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9166186c498170e1ff478a7f540846b2169243feb95bc228d39a67a1a450cdc6"}, + {file = "mypy-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:725b57a19b7408ef66a0fd9db59b5d3e528922250fb56e50bded27fea9ff28f0"}, + {file = "mypy-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:eec5c927aa4b3e8b4781840f1550079969926d0a22ce38075f6cfcf4b13e3eb4"}, + {file = "mypy-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79c520aa24f21852206b5ff2cf746dc13020113aa73fa55af504635a96e62718"}, + {file = "mypy-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:769ddb6bfe55c2bd9c7d6d7020885a5ea14289619db7ee650e06b1ef0852c6f4"}, + {file = "mypy-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf18f8db7e5f060d61c91e334d3b96d6bb624ddc9ee8a1cde407b737acbca2c"}, + {file = "mypy-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a2500ad063413bc873ae102cf655bf49889e0763b260a3a7cf544a0cbbf7e70a"}, + {file = "mypy-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:84cf9f7d8a8a22bb6a36444480f4cbf089c917a4179fbf7eea003ea931944a7f"}, + {file = "mypy-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a551ed0fc02455fe2c1fb0145160df8336b90ab80224739627b15ebe2b45e9dc"}, + {file = "mypy-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:372fd97293ed0076d52695849f59acbbb8461c4ab447858cdaeaf734a396d823"}, + {file = "mypy-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8a7444d6fcac7e2585b10abb91ad900a576da7af8f5cffffbff6065d9115813"}, + {file = "mypy-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35b13335c6c46a386577a51f3d38b2b5d14aa619e9633bb756bd77205e4bd09f"}, + {file = "mypy-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:2c9d570f53908cbea326ad8f96028a673b814d9dca7515bf71d95fa662c3eb6f"}, + {file = "mypy-1.5.0-py3-none-any.whl", hash = "sha256:69b32d0dedd211b80f1b7435644e1ef83033a2af2ac65adcdc87c38db68a86be"}, + {file = "mypy-1.5.0.tar.gz", hash = "sha256:f3460f34b3839b9bc84ee3ed65076eb827cd99ed13ed08d723f9083cada4a212"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" +typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] -python2 = ["typed-ast (>=1.4.0,<2)"] reports = ["lxml"] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -182,164 +239,273 @@ files = [ [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" [[package]] name = "packaging" -version = "23.0" +version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "platformdirs" -version = "3.2.0" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, - {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" + +[[package]] +name = "pre-commit" +version = "3.3.3" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, + {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" [[package]] name = "pyside6" -version = "6.5.0" +version = "6.5.2" description = "Python bindings for the Qt cross-platform application and UI framework" -category = "main" optional = false python-versions = "<3.12,>=3.7" files = [ - {file = "PySide6-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb059a0f3d4b763451a1e8dec440784dff1728e9ace6cb81c541cc1354c5f3dc"}, - {file = "PySide6-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5102c57841b15facb0aeca1f23d689ebc528a609bf5fb907f1ef2747f6415001"}, - {file = "PySide6-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:13e8e96aa7a89840575505f50b9635e6450bf413ff46288d1085b3a9f8b225c1"}, - {file = "PySide6-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:f30e1d0319ea4d2ddac654c58377079a40f38c4cac7b6fd631902f91190c1fc8"}, - {file = "PySide6-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c1c7244a4e83b3a4ea965f4a85776ebc64fa3c9b4af77ad70b22e64ccec3d451"}, - {file = "PySide6-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7242fe09aaeb3399152fa1c6c25098b93df945620a4bd81a37de0ecb2f64fd5d"}, + {file = "PySide6-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b509e4d3ffde4a594d70000f881452643c9aaed800bad2959882075c01f72428"}, + {file = "PySide6-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e6d879ca0f8827a7866856fbedd08857e4bd8f9a858dc998dea10d1913e97938"}, + {file = "PySide6-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:0356dc73c138c25b980d716e425801a61d4aa1d9f7811cf8a825499edfd4d1ae"}, + {file = "PySide6-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:f0944cb0da34dc3b0bb62c7a20b6618667760eccdaa4262a90ba7f64b19fb783"}, + {file = "PySide6-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ca259b4377eb74e4c9cb74a2afb18c37658f0c83dc18229d1f325974739f6df2"}, + {file = "PySide6-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad82cb12f805c5bec7693d6f1c0d6e4ae4b9462eb368a81bc0d3091de8fae76e"}, ] [package.dependencies] -PySide6-Addons = "6.5.0" -PySide6-Essentials = "6.5.0" -shiboken6 = "6.5.0" +PySide6-Addons = "6.5.2" +PySide6-Essentials = "6.5.2" +shiboken6 = "6.5.2" [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "pyside6-addons" -version = "6.5.0" +version = "6.5.2" description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" -category = "main" optional = false python-versions = "<3.12,>=3.7" files = [ - {file = "PySide6_Addons-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:d29e84d0b54c5fdeb6cc405d537788a648da975cc58e37f0df3a17cd11a67f1d"}, - {file = "PySide6_Addons-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:29551ca63a1cbc0fcd17fa9e477282857e2c66c3a55fdb9754b75519d5adf89a"}, - {file = "PySide6_Addons-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:db7a6117c3f944b4827204ed7f346030fc10c602521f278310a78021567df28f"}, - {file = "PySide6_Addons-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:fd5bc46cfffac7afa2f76c3dc6cb6f567a0ad1276d8177797c1bc152aec50f35"}, - {file = "PySide6_Addons-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9ed197a05f1c279d1589d8535040fe5e21b92fa19933e38de962050cb58f6c05"}, - {file = "PySide6_Addons-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1a9545df3e77c656a3708eaa3584d98ff41720c7dadf344d5126d66e83d0ab5a"}, + {file = "PySide6_Addons-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:a31cb7eca2e8cd80332e131124ed9ad197610a2a80eac4f2bd58e9124e38060a"}, + {file = "PySide6_Addons-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:bea98d823179b814109dcf3ac6c8a0eddf886570aa9ef8ef09b6bae37bc227ca"}, + {file = "PySide6_Addons-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:c77e06fd511cc8b9292c01724504d6806c33c1f5904bc59f5a8c560a74c15438"}, + {file = "PySide6_Addons-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:15bf592e54b3409853c3db23bdb20fb14725b84d50feee862e8b2a3a8a3a0627"}, + {file = "PySide6_Addons-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:26b55a658fed94a0b3c09927b408663860aca530bf6e83040dcb8fdcc221877d"}, + {file = "PySide6_Addons-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:793a53b7db32f7780fa9571a14f0bce3700604247127cdb2125b380c577a92eb"}, ] [package.dependencies] -PySide6-Essentials = "6.5.0" -shiboken6 = "6.5.0" +PySide6-Essentials = "6.5.2" +shiboken6 = "6.5.2" [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "pyside6-essentials" -version = "6.5.0" +version = "6.5.2" description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" -category = "main" optional = false python-versions = "<3.12,>=3.7" files = [ - {file = "PySide6_Essentials-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:4517e27fc540d9e645ea12dea82c8b29c042d66aaef46960a125cccdf0079800"}, - {file = "PySide6_Essentials-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f00d4f10758cdc3f49f94465ead788ad294dac7d9cc5e1cc0610e97c2bdfc8d7"}, - {file = "PySide6_Essentials-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:bc2e0a9dafe383ab965e98b6ddf73f709da3736197dea8eab265fd3e524db993"}, - {file = "PySide6_Essentials-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:58a88a099171c55a7e41e519208c9ca93661d277bb73c5897a2e3f2cbe5248b7"}, - {file = "PySide6_Essentials-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0287ec94ee1923d430bb20836bc649a5c76a59281245de469d7f759cc73c5ea7"}, - {file = "PySide6_Essentials-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:987c2ec04c35481c841de9b25931d2d074eb7d2e591aa5628041b2ca2df96d0e"}, + {file = "PySide6_Essentials-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:c9606de7afaee57f2c0861cc4b973bd630556dd38ec0d1542560cba81c27ab81"}, + {file = "PySide6_Essentials-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1620e82b38714a1570b142c01694d0415a25526517b24620ff9b00c9f76cfca9"}, + {file = "PySide6_Essentials-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:e67b10f96f0ac5ed24d7e3c4985d37c70550a9dee6f38b127faf5e5341151665"}, + {file = "PySide6_Essentials-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:149f1db77d82f35c6a88a403f5297645ebe737df28e163ac4dc402dfa0b961ee"}, + {file = "PySide6_Essentials-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4be6ed964cb863823f2788717b9a6ba8f1d94eb3fa2bf1584f4621ab5e021e27"}, + {file = "PySide6_Essentials-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6b21cf78b33554f793d409d79b828d9578d34200c86f813ef1b8dac756589b71"}, ] [package.dependencies] -shiboken6 = "6.5.0" +shiboken6 = "6.5.2" + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" + +[[package]] +name = "setuptools" +version = "68.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "shiboken6" -version = "6.5.0" +version = "6.5.2" description = "Python/C++ bindings helper module" -category = "main" optional = false python-versions = "<3.12,>=3.7" files = [ - {file = "shiboken6-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2d7fe6534a51ec9c96b82fc6275cf75e85ab29276a9778aed756465f81adf0c1"}, - {file = "shiboken6-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:46ff977f96c9d45dba3c3a313628356fd40e4423bb65bf2d9870b73396fad8be"}, - {file = "shiboken6-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:aee9708517821aaef547c83d689bf524d6f217d47232cb313d9af9e630215eed"}, - {file = "shiboken6-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:6e2874ea013d4cea7819935977bffa4c634ebcaabcb5287798df9f0c2f10c4c0"}, - {file = "shiboken6-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:72888ebc5ef7295df27197c0af726bd6731e2a883b346e448e2c740b3e34bc2f"}, - {file = "shiboken6-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1bba668221a5cf40186cea93ced018cf788d7476d50968a3f073ebbe41ce712d"}, + {file = "shiboken6-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba7af130d34ea03e329baebd80982d2635aee7e58dbb07a07085509a501ed03f"}, + {file = "shiboken6-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3fbc35ff3c19e7d39433671bfc1be3d7fa9d071bfdd0ffe1c2a4d27acd6cf6a5"}, + {file = "shiboken6-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:558bdb3b0ccc8aac5f9029eabfd6ad8d41f93a87cd7f54395e07732fce39280d"}, + {file = "shiboken6-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:4e073b40734a7f9cc6ac289c735362967bb45c34f591f7c0fab7cef1d62e6a66"}, + {file = "shiboken6-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cc89759aabafce49b629b189ed7c81986fedaac695714a4eed1aaeb16783c6a9"}, + {file = "shiboken6-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60d8dd3292e3f87662b9e37ae5c558c519f8250da627c473b68bd8d24ed3243"}, ] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -350,26 +516,50 @@ files = [ [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" +reference = "tsinghua_mirror" + +[[package]] +name = "virtualenv" +version = "20.24.3" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, + {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua_mirror" [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "e4f585835dc06b2c1439f12a1899dfaeb3d81b6ed753ca21544fe6c9c1c04613" +content-hash = "8ed6efe1986d4fadfbbbff50839852501ccceb26716d747dedfcd8cc85f0e283" diff --git a/pyproject.toml b/pyproject.toml index 8fa426d..e422e7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,20 +6,24 @@ authors = ["muzing "] license = "GPL-3.0" repository = "https://github.com/muziing/PySide6-Code-Tutorial" -# 使用清华pypi镜像 +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/muziing/PySide6-Code-Tutorial/issues" + +# 使用清华 pypi 镜像 [[tool.poetry.source]] -name = "tsinghua" +name = "tsinghua_mirror" url = "https://pypi.tuna.tsinghua.edu.cn/simple" -default = true +priority = "default" [tool.poetry.dependencies] python = ">=3.9,<3.12" pyside6 = "^6.5.0" -[tool.poetry.dev-dependencies] -black = "^23.3.0" +[tool.poetry.group.dev.dependencies] +black = "^23.7.0" isort = "^5.12.0" -mypy = "^1.2.0" +mypy = "^1.5.0" +pre-commit = "^3.3.3" [build-system] requires = ["poetry-core>=1.0.0"] @@ -33,5 +37,5 @@ profile = "black" line_length = 100 [tool.mypy] -python_version = "3.10" +python_version = "3.11" warn_return_any = true From 307945b3abf880d1e410d50008f34a18cfa697db Mon Sep 17 00:00:00 2001 From: ZHCai Date: Thu, 28 Sep 2023 16:53:29 +0800 Subject: [PATCH 02/13] =?UTF-8?q?Update=2003-=E7=B1=BB=E7=9A=84=E7=BB=A7?= =?UTF-8?q?=E6=89=BF=E5=85=B3=E7=B3=BB.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按照注释的意思, 此处应该是修改为subclass --- ...\232\204\347\273\247\346\211\277\345\205\263\347\263\273.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/03-\347\261\273\347\232\204\347\273\247\346\211\277\345\205\263\347\263\273.py" "b/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/03-\347\261\273\347\232\204\347\273\247\346\211\277\345\205\263\347\263\273.py" index 9002f28..46669f2 100644 --- "a/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/03-\347\261\273\347\232\204\347\273\247\346\211\277\345\205\263\347\263\273.py" +++ "b/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/03-\347\261\273\347\232\204\347\273\247\346\211\277\345\205\263\347\263\273.py" @@ -5,7 +5,7 @@ def get_sub_classes(class_): """递归地显示某一类的所有子类""" for subclass in class_.__subclasses__(): print(subclass) - if len(class_.__subclasses__()) > 0: + if len(subclass.__subclasses__()) > 0: get_sub_classes(subclass) From 424e942f1aad559a6afb21111418b28b4091fcdd Mon Sep 17 00:00:00 2001 From: muzing Date: Fri, 17 Nov 2023 22:17:50 +0800 Subject: [PATCH 03/13] Usual update --- .pre-commit-config.yaml | 22 ++ README.md | 22 +- Resources/Images/muzing-WeChat-Collection.png | Bin 0 -> 39558 bytes poetry.lock | 259 +++++++++--------- pyproject.toml | 8 +- 5 files changed, 169 insertions(+), 142 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 Resources/Images/muzing-WeChat-Collection.png diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..b5dd06f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,22 @@ +fail_fast: false + +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-toml + - id: check-yaml + - id: trailing-whitespace + - id: end-of-file-fixer + +- repo: https://github.com/psf/black + rev: 23.10.1 + hooks: + - id: black + args: [--config, "./pyproject.toml"] + +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + args: [--settings-path, "./pyproject.toml"] diff --git a/README.md b/README.md index 8ebf439..a955eba 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ ![GitHub Repo stars](https://img.shields.io/github/stars/muziing/PySide6-Code-Tutorial) ![License](https://img.shields.io/github/license/muziing/PySide6-Code-Tutorial) ![GitHub Last Commit](https://img.shields.io/github/last-commit/muziing/PySide6-Code-Tutorial) -[![PySide Version](https://img.shields.io/badge/PySide-6.5-blue)](https://doc.qt.io/qtforpython/index.html) +[![PySide Version](https://img.shields.io/badge/PySide-6.6-blue)](https://doc.qt.io/qtforpython/index.html) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) -[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/) +[![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/) ## 简介 @@ -21,7 +21,7 @@ - 在自己的机器上实际运行一下,仔细观察一下每个属性值的改变会怎样影响控件的外观行为,可能比静态的文档教程更有效 - 前身为 GitHub 热度最高的中文 PyQt5 教程 [PyQt-Practice](https://github.com/muziing/PyQt_practice),目前已有 ![PyQt-Practice Stars](https://img.shields.io/github/stars/muziing/PyQt_practice.svg) 个 Stars - 相比 [PyQt-Practice](https://github.com/muziing/PyQt_practice),改进了项目目录结构,增加了部分内容,更加清晰丰富 -- 使用最新的 Python 与 PySide 版本(目前为`3.11`与`6.5`) +- 使用最新的 Python 与 PySide 版本(目前为`3.11`与`6.6`) 希望本项目对你我的 Python-GUI 学习之旅有所帮助。 @@ -35,9 +35,9 @@ 1. Star 本仓库 2. 通过以下方法之一获取源码 - - 克隆仓库(推荐):`git clone https://github.com/muziing/PySide6-Code-Tutorial.git` - - 下载 zip: - - 查看 [Releases](https://github.com/muziing/PySide6-Code-Tutorial/releases) 界面,下载最新发布版(文件更小) + - 克隆仓库(推荐):`git clone https://github.com/muziing/PySide6-Code-Tutorial.git` + - 下载 zip: + - 查看 [Releases](https://github.com/muziing/PySide6-Code-Tutorial/releases) 界面,下载最新发布版(文件更小) 3. 进入项目目录 ### 二、配置虚拟环境与安装依赖 @@ -56,11 +56,11 @@ 1. 确保 Python 版本与 [pyproject.toml](./pyproject.toml) 中要求的一致 2. 创建虚拟环境 - - Windows: `python -m venv --upgrade-deps venv` - - Linux/macOS: `python3 -m venv --upgrade-deps venv` + - Windows: `python -m venv --upgrade-deps venv` + - Linux/macOS: `python3 -m venv --upgrade-deps venv` 3. 激活虚拟环境 - - Windows: `venv\Scripts\activate` - - Linux/macOS: `. venv/bin/activate` + - Windows: `venv\Scripts\activate` + - Linux/macOS: `. venv/bin/activate` 4. 安装依赖:`pip install -r requirements.txt` **方式 C** :其他包管理工具 @@ -142,4 +142,4 @@ PySide6 Code Tutorial 是一个开源项目,非常期待以及感谢你的参 本项目的[主要作者/维护者](https://muzing.top/about/)是一名还没有收入的在校学生,如果本项目对你有帮助,希望可以请他喝一杯冰可乐 :beer:。 -![微信收款码](./Resources/Images/muzing-WeChat-Collection-QRCode.png) +![微信收款码](./Resources/Images/muzing-WeChat-Collection.png) diff --git a/Resources/Images/muzing-WeChat-Collection.png b/Resources/Images/muzing-WeChat-Collection.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9f8dec09348f676ad5be62f02b951bc03ffae7 GIT binary patch literal 39558 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 ^^MF~|t8P{J;_$RpHGNrFHjVUMAQ3MLv z6I4B!U5`RpY@i&X58UC=R~~j8N-B2tANT|c>TksnfdH+k8SNQFsY;1zY;^^}mU5Rd zOxqL|nyZf~M6+j5x=avoAng78N)b<6Lz-whj-Wwq{-a0F5Y=$Xgs7sV`+4NOzKX_J z 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 S)@(TZKT%r$|F8VN=zj&sgubW% literal 0 HcmV?d00001 diff --git a/poetry.lock b/poetry.lock index 7c972c6..40ba8e8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,34 +1,30 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "black" -version = "23.7.0" +version = "23.11.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, + {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, + {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, + {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, + {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, + {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, + {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, + {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, + {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, + {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, + {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, + {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, + {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, + {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, + {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, + {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, + {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, + {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, + {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, ] [package.dependencies] @@ -38,7 +34,7 @@ packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -53,13 +49,13 @@ reference = "tsinghua_mirror" [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8" files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [package.source] @@ -69,13 +65,13 @@ reference = "tsinghua_mirror" [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -120,18 +116,19 @@ reference = "tsinghua_mirror" [[package]] name = "filelock" -version = "3.12.2" +version = "3.13.1" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [package.source] type = "legacy" @@ -140,13 +137,13 @@ reference = "tsinghua_mirror" [[package]] name = "identify" -version = "2.5.26" +version = "2.5.31" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"}, + {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"}, ] [package.extras] @@ -181,33 +178,38 @@ reference = "tsinghua_mirror" [[package]] name = "mypy" -version = "1.5.0" +version = "1.7.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad3109bec37cc33654de8db30fe8ff3a1bb57ea65144167d68185e6dced9868d"}, - {file = "mypy-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b4ea3a0241cb005b0ccdbd318fb99619b21ae51bcf1660b95fc22e0e7d3ba4a1"}, - {file = "mypy-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fe816e26e676c1311b9e04fd576543b873576d39439f7c24c8e5c7728391ecf"}, - {file = "mypy-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42170e68adb1603ccdc55a30068f72bcfcde2ce650188e4c1b2a93018b826735"}, - {file = "mypy-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d145b81a8214687cfc1f85c03663a5bbe736777410e5580e54d526e7e904f564"}, - {file = "mypy-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c36011320e452eb30bec38b9fd3ba20569dc9545d7d4540d967f3ea1fab9c374"}, - {file = "mypy-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3940cf5845b2512b3ab95463198b0cdf87975dfd17fdcc6ce9709a9abe09e69"}, - {file = "mypy-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9166186c498170e1ff478a7f540846b2169243feb95bc228d39a67a1a450cdc6"}, - {file = "mypy-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:725b57a19b7408ef66a0fd9db59b5d3e528922250fb56e50bded27fea9ff28f0"}, - {file = "mypy-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:eec5c927aa4b3e8b4781840f1550079969926d0a22ce38075f6cfcf4b13e3eb4"}, - {file = "mypy-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79c520aa24f21852206b5ff2cf746dc13020113aa73fa55af504635a96e62718"}, - {file = "mypy-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:769ddb6bfe55c2bd9c7d6d7020885a5ea14289619db7ee650e06b1ef0852c6f4"}, - {file = "mypy-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf18f8db7e5f060d61c91e334d3b96d6bb624ddc9ee8a1cde407b737acbca2c"}, - {file = "mypy-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a2500ad063413bc873ae102cf655bf49889e0763b260a3a7cf544a0cbbf7e70a"}, - {file = "mypy-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:84cf9f7d8a8a22bb6a36444480f4cbf089c917a4179fbf7eea003ea931944a7f"}, - {file = "mypy-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a551ed0fc02455fe2c1fb0145160df8336b90ab80224739627b15ebe2b45e9dc"}, - {file = "mypy-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:372fd97293ed0076d52695849f59acbbb8461c4ab447858cdaeaf734a396d823"}, - {file = "mypy-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8a7444d6fcac7e2585b10abb91ad900a576da7af8f5cffffbff6065d9115813"}, - {file = "mypy-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35b13335c6c46a386577a51f3d38b2b5d14aa619e9633bb756bd77205e4bd09f"}, - {file = "mypy-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:2c9d570f53908cbea326ad8f96028a673b814d9dca7515bf71d95fa662c3eb6f"}, - {file = "mypy-1.5.0-py3-none-any.whl", hash = "sha256:69b32d0dedd211b80f1b7435644e1ef83033a2af2ac65adcdc87c38db68a86be"}, - {file = "mypy-1.5.0.tar.gz", hash = "sha256:f3460f34b3839b9bc84ee3ed65076eb827cd99ed13ed08d723f9083cada4a212"}, + {file = "mypy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5da84d7bf257fd8f66b4f759a904fd2c5a765f70d8b52dde62b521972a0a2357"}, + {file = "mypy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a3637c03f4025f6405737570d6cbfa4f1400eb3c649317634d273687a09ffc2f"}, + {file = "mypy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b633f188fc5ae1b6edca39dae566974d7ef4e9aaaae00bc36efe1f855e5173ac"}, + {file = "mypy-1.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed9a3997b90c6f891138e3f83fb8f475c74db4ccaa942a1c7bf99e83a989a1"}, + {file = "mypy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fe46e96ae319df21359c8db77e1aecac8e5949da4773c0274c0ef3d8d1268a9"}, + {file = "mypy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:df67fbeb666ee8828f675fee724cc2cbd2e4828cc3df56703e02fe6a421b7401"}, + {file = "mypy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a79cdc12a02eb526d808a32a934c6fe6df07b05f3573d210e41808020aed8b5d"}, + {file = "mypy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65f385a6f43211effe8c682e8ec3f55d79391f70a201575def73d08db68ead1"}, + {file = "mypy-1.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e81ffd120ee24959b449b647c4b2fbfcf8acf3465e082b8d58fd6c4c2b27e46"}, + {file = "mypy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:f29386804c3577c83d76520abf18cfcd7d68264c7e431c5907d250ab502658ee"}, + {file = "mypy-1.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87c076c174e2c7ef8ab416c4e252d94c08cd4980a10967754f91571070bf5fbe"}, + {file = "mypy-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cb8d5f6d0fcd9e708bb190b224089e45902cacef6f6915481806b0c77f7786d"}, + {file = "mypy-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93e76c2256aa50d9c82a88e2f569232e9862c9982095f6d54e13509f01222fc"}, + {file = "mypy-1.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cddee95dea7990e2215576fae95f6b78a8c12f4c089d7e4367564704e99118d3"}, + {file = "mypy-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d01921dbd691c4061a3e2ecdbfbfad029410c5c2b1ee88946bf45c62c6c91210"}, + {file = "mypy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:185cff9b9a7fec1f9f7d8352dff8a4c713b2e3eea9c6c4b5ff7f0edf46b91e41"}, + {file = "mypy-1.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7b1e399c47b18feb6f8ad4a3eef3813e28c1e871ea7d4ea5d444b2ac03c418"}, + {file = "mypy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9fe455ad58a20ec68599139ed1113b21f977b536a91b42bef3ffed5cce7391"}, + {file = "mypy-1.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d0fa29919d2e720c8dbaf07d5578f93d7b313c3e9954c8ec05b6d83da592e5d9"}, + {file = "mypy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b53655a295c1ed1af9e96b462a736bf083adba7b314ae775563e3fb4e6795f5"}, + {file = "mypy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1b06b4b109e342f7dccc9efda965fc3970a604db70f8560ddfdee7ef19afb05"}, + {file = "mypy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf7a2f0a6907f231d5e41adba1a82d7d88cf1f61a70335889412dec99feeb0f8"}, + {file = "mypy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551d4a0cdcbd1d2cccdcc7cb516bb4ae888794929f5b040bb51aae1846062901"}, + {file = "mypy-1.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55d28d7963bef00c330cb6461db80b0b72afe2f3c4e2963c99517cf06454e665"}, + {file = "mypy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:870bd1ffc8a5862e593185a4c169804f2744112b4a7c55b93eb50f48e7a77010"}, + {file = "mypy-1.7.0-py3-none-any.whl", hash = "sha256:96650d9a4c651bc2a4991cf46f100973f656d69edc7faf91844e87fe627f7e96"}, + {file = "mypy-1.7.0.tar.gz", hash = "sha256:1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"}, ] [package.dependencies] @@ -218,6 +220,7 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] +mypyc = ["setuptools (>=50)"] reports = ["lxml"] [package.source] @@ -262,13 +265,13 @@ reference = "tsinghua_mirror" [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [package.source] @@ -294,13 +297,13 @@ reference = "tsinghua_mirror" [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] @@ -314,13 +317,13 @@ reference = "tsinghua_mirror" [[package]] name = "pre-commit" -version = "3.3.3" +version = "3.5.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.8" files = [ - {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, - {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, + {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, + {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, ] [package.dependencies] @@ -337,23 +340,21 @@ reference = "tsinghua_mirror" [[package]] name = "pyside6" -version = "6.5.2" +version = "6.6.0" description = "Python bindings for the Qt cross-platform application and UI framework" optional = false -python-versions = "<3.12,>=3.7" +python-versions = "<3.13,>=3.8" files = [ - {file = "PySide6-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b509e4d3ffde4a594d70000f881452643c9aaed800bad2959882075c01f72428"}, - {file = "PySide6-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e6d879ca0f8827a7866856fbedd08857e4bd8f9a858dc998dea10d1913e97938"}, - {file = "PySide6-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:0356dc73c138c25b980d716e425801a61d4aa1d9f7811cf8a825499edfd4d1ae"}, - {file = "PySide6-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:f0944cb0da34dc3b0bb62c7a20b6618667760eccdaa4262a90ba7f64b19fb783"}, - {file = "PySide6-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ca259b4377eb74e4c9cb74a2afb18c37658f0c83dc18229d1f325974739f6df2"}, - {file = "PySide6-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad82cb12f805c5bec7693d6f1c0d6e4ae4b9462eb368a81bc0d3091de8fae76e"}, + {file = "PySide6-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:8103f14ed46a05e81acccbfc8388e3321e392fe54f3aa4a13336bd2ed8af5cd4"}, + {file = "PySide6-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:d487eab0f9bfc5c9141b474093e16207ff48cd9335e6465a01deb8dff0693fbc"}, + {file = "PySide6-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:f40917b7a0c5c7f0c7faaa87e66ffa3b58d9d1d3d977d30fc07e193b82dd6749"}, + {file = "PySide6-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:d41dfcfa32c89502cdaa20206b7e2aba199072f94b424bc6a4d6f50b10f4eb5a"}, ] [package.dependencies] -PySide6-Addons = "6.5.2" -PySide6-Essentials = "6.5.2" -shiboken6 = "6.5.2" +PySide6-Addons = "6.6.0" +PySide6-Essentials = "6.6.0" +shiboken6 = "6.6.0" [package.source] type = "legacy" @@ -362,22 +363,20 @@ reference = "tsinghua_mirror" [[package]] name = "pyside6-addons" -version = "6.5.2" +version = "6.6.0" description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" optional = false -python-versions = "<3.12,>=3.7" +python-versions = "<3.13,>=3.8" files = [ - {file = "PySide6_Addons-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:a31cb7eca2e8cd80332e131124ed9ad197610a2a80eac4f2bd58e9124e38060a"}, - {file = "PySide6_Addons-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:bea98d823179b814109dcf3ac6c8a0eddf886570aa9ef8ef09b6bae37bc227ca"}, - {file = "PySide6_Addons-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:c77e06fd511cc8b9292c01724504d6806c33c1f5904bc59f5a8c560a74c15438"}, - {file = "PySide6_Addons-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:15bf592e54b3409853c3db23bdb20fb14725b84d50feee862e8b2a3a8a3a0627"}, - {file = "PySide6_Addons-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:26b55a658fed94a0b3c09927b408663860aca530bf6e83040dcb8fdcc221877d"}, - {file = "PySide6_Addons-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:793a53b7db32f7780fa9571a14f0bce3700604247127cdb2125b380c577a92eb"}, + {file = "PySide6_Addons-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:82fe1bb6a1aabf5ab3d8632072dc908aa37fc75b4b46e520258c441bd6b103fb"}, + {file = "PySide6_Addons-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5c56e963b841aeaacbc9ca8ca34df45308818dbd6fc59faa2b5a00a299e9892b"}, + {file = "PySide6_Addons-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:e145514a7c37ee3a6ad0ddd693f805ccff6fbd9640a24fb2ef6b7f852882d3e9"}, + {file = "PySide6_Addons-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:414864f7cfbdf8ac4c5a745566a515f18b6018d5730bf5489cc2716b5e1fcd9b"}, ] [package.dependencies] -PySide6-Essentials = "6.5.2" -shiboken6 = "6.5.2" +PySide6-Essentials = "6.6.0" +shiboken6 = "6.6.0" [package.source] type = "legacy" @@ -386,21 +385,19 @@ reference = "tsinghua_mirror" [[package]] name = "pyside6-essentials" -version = "6.5.2" +version = "6.6.0" description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" optional = false -python-versions = "<3.12,>=3.7" +python-versions = "<3.13,>=3.8" files = [ - {file = "PySide6_Essentials-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:c9606de7afaee57f2c0861cc4b973bd630556dd38ec0d1542560cba81c27ab81"}, - {file = "PySide6_Essentials-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1620e82b38714a1570b142c01694d0415a25526517b24620ff9b00c9f76cfca9"}, - {file = "PySide6_Essentials-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:e67b10f96f0ac5ed24d7e3c4985d37c70550a9dee6f38b127faf5e5341151665"}, - {file = "PySide6_Essentials-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:149f1db77d82f35c6a88a403f5297645ebe737df28e163ac4dc402dfa0b961ee"}, - {file = "PySide6_Essentials-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4be6ed964cb863823f2788717b9a6ba8f1d94eb3fa2bf1584f4621ab5e021e27"}, - {file = "PySide6_Essentials-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6b21cf78b33554f793d409d79b828d9578d34200c86f813ef1b8dac756589b71"}, + {file = "PySide6_Essentials-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:26d27e3e3a18acbc770a69a30774fd345414fe4932fcb89d2cfc4fc130c3eb33"}, + {file = "PySide6_Essentials-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:60284641619f964e1cb4d53cf3169d7a385e0378b74edb75610918d2aea1c4e5"}, + {file = "PySide6_Essentials-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:37d5d9c6ee696a17890f07e7ce1f88f890174bd4aca29f47922ecc959ab28352"}, + {file = "PySide6_Essentials-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:97bbe33f584a09cef6a3fbc1295fb0fd7acaac345bc0f5601bf45d41c91683ac"}, ] [package.dependencies] -shiboken6 = "6.5.2" +shiboken6 = "6.6.0" [package.source] type = "legacy" @@ -419,6 +416,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -426,8 +424,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -444,6 +449,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -451,6 +457,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -463,19 +470,19 @@ reference = "tsinghua_mirror" [[package]] name = "setuptools" -version = "68.0.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [package.source] type = "legacy" @@ -484,17 +491,15 @@ reference = "tsinghua_mirror" [[package]] name = "shiboken6" -version = "6.5.2" +version = "6.6.0" description = "Python/C++ bindings helper module" optional = false -python-versions = "<3.12,>=3.7" +python-versions = "<3.13,>=3.8" files = [ - {file = "shiboken6-6.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba7af130d34ea03e329baebd80982d2635aee7e58dbb07a07085509a501ed03f"}, - {file = "shiboken6-6.5.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3fbc35ff3c19e7d39433671bfc1be3d7fa9d071bfdd0ffe1c2a4d27acd6cf6a5"}, - {file = "shiboken6-6.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:558bdb3b0ccc8aac5f9029eabfd6ad8d41f93a87cd7f54395e07732fce39280d"}, - {file = "shiboken6-6.5.2-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:4e073b40734a7f9cc6ac289c735362967bb45c34f591f7c0fab7cef1d62e6a66"}, - {file = "shiboken6-6.5.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cc89759aabafce49b629b189ed7c81986fedaac695714a4eed1aaeb16783c6a9"}, - {file = "shiboken6-6.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60d8dd3292e3f87662b9e37ae5c558c519f8250da627c473b68bd8d24ed3243"}, + {file = "shiboken6-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:bf23c43e53ffe6097853666ced05358c6640c378e992902a36c4cf77efb0223b"}, + {file = "shiboken6-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:456b89fb4b323e0c5002d92e4d346b48bb4e709db801208df8a0d6b4f5efc33d"}, + {file = "shiboken6-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:fb8c683206c3365f9240fff7f908485384893b02efb089b69ff816b4390baa9a"}, + {file = "shiboken6-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:e62b2610b84f0ff7ed0181a4c535849cdc0654127097b5ef561cf0a33078f245"}, ] [package.source] @@ -520,13 +525,13 @@ reference = "tsinghua_mirror" [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [package.source] @@ -536,13 +541,13 @@ reference = "tsinghua_mirror" [[package]] name = "virtualenv" -version = "20.24.3" +version = "20.24.6" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, + {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, + {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, ] [package.dependencies] @@ -551,7 +556,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [package.source] diff --git a/pyproject.toml b/pyproject.toml index e422e7c..eb392fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,13 +17,13 @@ priority = "default" [tool.poetry.dependencies] python = ">=3.9,<3.12" -pyside6 = "^6.5.0" +pyside6 = "^6.6.0" [tool.poetry.group.dev.dependencies] -black = "^23.7.0" +black = "^23.11.0" isort = "^5.12.0" -mypy = "^1.5.0" -pre-commit = "^3.3.3" +mypy = "^1.7.0" +pre-commit = "^3.5.0" [build-system] requires = ["poetry-core>=1.0.0"] From a7ad0e6006536a0145dcc243abd6d5ecbe1fdae2 Mon Sep 17 00:00:00 2001 From: muzing Date: Fri, 17 Nov 2023 22:21:16 +0800 Subject: [PATCH 04/13] Fix trailing-whitespace --- ...257\271\350\261\241\347\263\273\347\273\237.md" | 2 +- ...6\223\345\205\245\347\204\246\347\202\271-2.py" | 12 ++++++------ .../06-QComboBox-\344\277\241\345\217\267.py" | 14 +++++++------- ...260\272\345\257\270\346\213\226\346\213\275.py" | 10 +++++----- ...217\212\347\274\226\350\276\221\345\231\250.md" | 2 +- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git "a/02-QtCore-\351\235\236GUI\347\232\204\346\240\270\345\277\203\345\212\237\350\203\275/01-The_Meta-Object_System-\345\205\203\345\257\271\350\261\241\347\263\273\347\273\237.md" "b/02-QtCore-\351\235\236GUI\347\232\204\346\240\270\345\277\203\345\212\237\350\203\275/01-The_Meta-Object_System-\345\205\203\345\257\271\350\261\241\347\263\273\347\273\237.md" index ef2a6f0..f3d24e8 100644 --- "a/02-QtCore-\351\235\236GUI\347\232\204\346\240\270\345\277\203\345\212\237\350\203\275/01-The_Meta-Object_System-\345\205\203\345\257\271\350\261\241\347\263\273\347\273\237.md" +++ "b/02-QtCore-\351\235\236GUI\347\232\204\346\240\270\345\277\203\345\212\237\350\203\275/01-The_Meta-Object_System-\345\205\203\345\257\271\350\261\241\347\263\273\347\273\237.md" @@ -74,6 +74,6 @@ if (QLabel label = QLabel (obj)) { label.setText(tr("Ping")) ------ -© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the [GNU Free Documentation License version 1.3](https://www.gnu.org/licenses/fdl-1.3.html) as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. +© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the [GNU Free Documentation License version 1.3](https://www.gnu.org/licenses/fdl-1.3.html) as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. © 2022 zh_CN Translation by muzing\. diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/09-QWidget-\351\224\256\347\233\230\350\276\223\345\205\245\347\204\246\347\202\271-2.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/09-QWidget-\351\224\256\347\233\230\350\276\223\345\205\245\347\204\246\347\202\271-2.py" index 7d0e4f3..991b21b 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/09-QWidget-\351\224\256\347\233\230\350\276\223\345\205\245\347\204\246\347\202\271-2.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/09-QWidget-\351\224\256\347\233\230\350\276\223\345\205\245\347\204\246\347\202\271-2.py" @@ -1,8 +1,3 @@ -import sys - -from PySide6 import QtWidgets -from PySide6.QtCore import Qt - """ QWidget 键盘输入焦点控制 @@ -14,7 +9,7 @@ https://doc.qt.io/qt-6/qwidget.html#setFocusProxy .setFocusPolicy(policy: Qt.FocusPolicy) 设置焦点策略,详见下方Qt.FocusPolicy -.focusPolicy() -> Qt.FocusPolicy 返回该控件的焦点策略 +.focusPolicy() -> Qt.FocusPolicy 返回该控件的焦点策略 Qt.FocusPolicy 具体分为如下数种: https://doc.qt.io/qt-6/qt.html#FocusPolicy-enum @@ -32,6 +27,11 @@ """ +import sys + +from PySide6 import QtWidgets +from PySide6.QtCore import Qt + class MyWidget(QtWidgets.QWidget): def __init__(self, *args, **kwargs): diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/06-QComboBox-\344\277\241\345\217\267.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/06-QComboBox-\344\277\241\345\217\267.py" index 10a9639..1580faa 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/06-QComboBox-\344\277\241\345\217\267.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/06-QComboBox-\344\277\241\345\217\267.py" @@ -1,14 +1,10 @@ -import sys - -from PySide6 import QtCore, QtWidgets - """ QComboBox 信号 提供了多种精细的信号供使用 .activated(index: int) 当用户在组合下拉框中选中一个条目时发射此信号,索引作为参数传递。即使选中项未改变也会发射 - + .currentIndexChanged(index: int) 当当前索引由用户交互或编程方式改变时发射此信号,索引作为参数传递。 若combobox为空或当前索引已重置,则传递条目的 index 或 -1 @@ -18,11 +14,11 @@ .editTextChanged(text: str) 当启用了可编辑模式,且编辑器中的文本发生改变时发射此信号,新的文本作为参数传递 - + .highlighted(index: int) 当用户高亮(光标移入或键盘选择)了弹出菜单中的某一条目时发射此信号 索引值作为参数传递 - + .textActivated(text: str) 当用户选择了条目之一时,发射此信号并将文本作为参数传递 即使选择未发生改变也会发射此信号 @@ -33,6 +29,10 @@ """ +import sys + +from PySide6 import QtCore, QtWidgets + class MyWidget(QtWidgets.QWidget): def __init__(self, *args, **kwargs): diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/01-QDialog-\345\257\271\350\257\235\346\241\206\345\237\272\347\261\273/03-QDialog-\346\247\275\343\200\201\345\260\272\345\257\270\346\213\226\346\213\275.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/01-QDialog-\345\257\271\350\257\235\346\241\206\345\237\272\347\261\273/03-QDialog-\346\247\275\343\200\201\345\260\272\345\257\270\346\213\226\346\213\275.py" index a70932c..cd9f73c 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/01-QDialog-\345\257\271\350\257\235\346\241\206\345\237\272\347\261\273/03-QDialog-\346\247\275\343\200\201\345\260\272\345\257\270\346\213\226\346\213\275.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/01-QDialog-\345\257\271\350\257\235\346\241\206\345\237\272\347\261\273/03-QDialog-\346\247\275\343\200\201\345\260\272\345\257\270\346\213\226\346\213\275.py" @@ -1,7 +1,3 @@ -import sys - -from PySide6 import QtCore, QtWidgets - """ QDialog 槽、结果、尺寸拖拽控件 @@ -14,7 +10,7 @@ 则done()也将导致局部事件循环结束,且exec()返回r。 .exec() 将对话框作为模态对话框显示。(默认为应用程序级模态)此函数返回QDialog.Accepted或QDialog.Rejected。 尽量避免使用exec()函数,而用open()替代。因为open()是异步的,并且不会增加额外的事件循环 - + QDialog.result中保存了对话框获得的结果,也可以通过代码显式设置结果码: .result() -> int 获取模态对话框的结果码,QDialog.Accepted为1,QDialog.Rejected为0 .setResult(i: int) 将模态对话框的结果码设置为i @@ -30,6 +26,10 @@ """ +import sys + +from PySide6 import QtCore, QtWidgets + class MyWidget(QtWidgets.QWidget): def __init__(self, *args, **kwargs): diff --git "a/05-QtWidgets-\350\277\233\351\230\266\350\257\235\351\242\230/02-QSS-\346\240\267\345\274\217\350\241\250/01-QSS\344\270\273\351\242\230\345\217\212\347\274\226\350\276\221\345\231\250.md" "b/05-QtWidgets-\350\277\233\351\230\266\350\257\235\351\242\230/02-QSS-\346\240\267\345\274\217\350\241\250/01-QSS\344\270\273\351\242\230\345\217\212\347\274\226\350\276\221\345\231\250.md" index 0365495..ba4475b 100644 --- "a/05-QtWidgets-\350\277\233\351\230\266\350\257\235\351\242\230/02-QSS-\346\240\267\345\274\217\350\241\250/01-QSS\344\270\273\351\242\230\345\217\212\347\274\226\350\276\221\345\231\250.md" +++ "b/05-QtWidgets-\350\277\233\351\230\266\350\257\235\351\242\230/02-QSS-\346\240\267\345\274\217\350\241\250/01-QSS\344\270\273\351\242\230\345\217\212\347\274\226\350\276\221\345\231\250.md" @@ -67,7 +67,7 @@ class QSSLoader: ```python app = QApplication(sys.argv) window = MainWindow() - + style_file = './style.qss' style_sheet = QSSLoader.read_qss_file(style_file) window.setStyleSheet(style_sheet) From 808c9ed879486a43b7a33760353ced9746f9e03a Mon Sep 17 00:00:00 2001 From: muzing Date: Fri, 17 Nov 2023 22:27:14 +0800 Subject: [PATCH 05/13] Update qrc-rcc --- ...04\346\272\220\347\263\273\347\273\237.md" | 47 +++-- .../open_qfile.py" | 183 ++++++++++++++++++ 2 files changed, 211 insertions(+), 19 deletions(-) create mode 100644 "07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" diff --git "a/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/01-\345\234\250PyQt\344\270\255\344\275\277\347\224\250qrc-rcc\350\265\204\346\272\220\347\263\273\347\273\237.md" "b/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/01-\345\234\250PyQt\344\270\255\344\275\277\347\224\250qrc-rcc\350\265\204\346\272\220\347\263\273\347\273\237.md" index 7883e76..112a676 100644 --- "a/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/01-\345\234\250PyQt\344\270\255\344\275\277\347\224\250qrc-rcc\350\265\204\346\272\220\347\263\273\347\273\237.md" +++ "b/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/01-\345\234\250PyQt\344\270\255\344\275\277\347\224\250qrc-rcc\350\265\204\346\272\220\347\263\273\347\273\237.md" @@ -118,48 +118,48 @@ Qt Resource Compiler version 6.4.1 Options: -h, --help 显示关于命令行选项的帮助 - + --help-all 显示包括Qt独有选项在内的所有帮助 - + -v, --version 显示版本信息 - + -o, --output 将输出写入到 中,而不是 stdout 中 -t, --temp 为大资源文件使用临时文件 - + --name 创建一个外部初始化函数 - + --root 用根目录 作为资源访问路径的前缀 - + --compress-algo 使用 算法压缩输入文件([zlib], none) - + --compress 级别压缩输入文件 - + --no-compress 禁用所有压缩,等同于 --compress-algo=none - + --no-zstd 禁止使用 zstd 压缩 - + --threshold 衡量是否值得进行压缩的阈值 - + --binary 输出一个作为动态资源使用的二进制文件 - + -g, --generator 选择生成器 - + --pass Pass number for big resources - + --namespace 关闭命名空间宏 - + --verbose 启用 verbose 模式 - + --list 只列出 .qrc 文件条目,不生成代码 - + --list-mapping 只输出 .qrc 中定义的资源路径与文件系统路径的 映射,不生成代码 - + -d, --depfile 中写入一个包含 .qrc 依赖项的 depfile --project 输出一个包含当前目录下所有文件的资源文件 - + --format-version 写入 RCC 格式的版本 Arguments: @@ -302,6 +302,15 @@ def get_about_text(): return about_text ``` +或者使用本项目提供的 [`OpenQFile`](./open_qfile.py): + +```python +from open_qfile import OpenQFile + +with OpenQFile(":/texts/About_Text", "rt", encoding="utf-8") as f: + about_text = f.read() +``` + 对于图片,可以在创建 [QIcon](https://doc.qt.io/qt-6/qicon.html)、[QImage](https://doc.qt.io/qt-6/qimage.html)、[QPixmap](https://doc.qt.io/qt-6/qpixmap.html) 对象时将直接资源路径作为参数传入: ```python diff --git "a/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" "b/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" new file mode 100644 index 0000000..9be3324 --- /dev/null +++ "b/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" @@ -0,0 +1,183 @@ +import locale +import os +import warnings +from typing import Optional, Union + +from PySide6.QtCore import QFile, QIODevice + + +class OpenQFile: + """ + 用于以QFile形式打开文件的上下文管理器 \n + 使支持 Python 的 with 风格 \n + """ + + def __init__(self, file: Union[str, bytes, os.PathLike[str]], + mode="r", + encoding: Optional[str] = None): + """ + :param file: 文件路径 + :param mode: 打开模式(暂时只支持文本读取) + :param encoding: 文本文件编码 + """ + + # 分析模式是否合法、返回正确的 FileIo 类实例 + # https://docs.python.org/zh-cn/3/library/functions.html#open + if "b" not in mode: + # 文本模式 + self.io_obj = PyQTextFileIo(file, mode, encoding) + else: + # 二进制模式(暂不支持) + # self.io_obj = PyQByteFileIo(file, mode) + raise ValueError("暂不支持该模式") + + def __enter__(self): + return self.io_obj + + def __exit__(self, exc_type, exc_val, exc_tb): + self.io_obj.close() + + +class PyQTextFileIo: + """ + 将 QFile 中处理文本文件读写的部分封装成 Python的 io 风格 + 目前只支持读取,不支持写入 + """ + + @classmethod + def _parse_mode(cls, py_mode: str) -> QIODevice: + """ + 解析文件打开模式,将 Python open() 风格转换至 QIODevice.OpenModeFlag + https://docs.python.org/zh-cn/3/library/functions.html#open + https://doc.qt.io/qt-6/qiodevicebase.html#OpenModeFlag-enum + :return: mode + """ + + qt_mode: QIODevice = QIODevice.Text + + # 暂不支持写入 + if "r" in py_mode and "+" not in py_mode: + qt_mode = qt_mode | QIODevice.ReadOnly + elif "w" in py_mode: + qt_mode = qt_mode | QIODevice.WriteOnly + elif "+" in py_mode: + qt_mode = qt_mode | QIODevice.ReadWrite + + if "x" in py_mode: + qt_mode = qt_mode | QIODevice.NewOnly + + return qt_mode + + def __init__(self, file: Union[str, bytes, os.PathLike[str]], + mode, + encoding: Optional[str] = None): + + self._file = QFile(file) # TODO 处理 QFile 只接受`/`风格路径可能导致 Windows 平台异常的问题 + + if encoding is not None: + self.encoding = encoding + else: + # 用户未指定编码,则使用当前平台默认编码 + self.encoding = locale.getencoding() + + self.mode = self._parse_mode(mode) + self._file.open(self.mode) + + def readable(self) -> bool: + """ + 当前文件是否可读 \n + :return: isReadable + """ + return self._file.isReadable() + + def read(self, size: int = -1) -> str: + """ + 从流中读取至多 size 个字符并以单个 str 的形式返回。 如果 size 为负值或 None,则读取至 EOF。 \n + https://docs.python.org/3/library/io.html#io.TextIOBase.read + :param size: 读取的字符数,负值或 None 表示一直读取直到 EOF + :return: 文件中读出的文本内容 + """ + + if not self.readable(): + raise OSError(f"File '{self._file.fileName()}' is not Readable.") + + if size < 0 or size is None: + # 读取文件,并将 QByteArray 转为 str + text = str(self._file.readAll(), encoding=self.encoding) + else: + # 已知问题:性能太差 + # PySide6.QtCore.QIODevice.read(maxlen) 以字节而非字符方式计算长度,行为不一致 + # 而 QTextStream 对字符编码支持太差,许多编码并不支持 + text = str(self._file.readAll(), encoding=self.encoding)[0:size] # 性能太差 + + return text + + def readline(self, size: int = - 1, /) -> str: + """ + 模仿 io.TextIOBase.readline 的行为,读取文件中的一行。 \n + https://docs.python.org/3/library/io.html#io.TextIOBase.readline + :param size: 如果指定了 size ,最多将读取 size 个字符。 + :return: 单行文本 + """ + + if not self.readable(): + raise OSError(f"File '{self._file.fileName()}' is not Readable.") + + if self._file.atEnd(): + warnings.warn(f"Trying to read a line at the end of the file '{self._file.fileName()}'.") + return "" + else: + if size == 0: + return "" + else: + line = str(self._file.readLine(), encoding=self.encoding) + if size < 0: + return line + else: + return line[0:size] + + def readlines(self, hint: int = -1, /) -> list[str]: + """ + 模仿 Python 中 io.IOBase.readlines() 的行为,返回由所有行组成的字符串列表。 \n + Known issue: slower than `readline()` \n + https://docs.python.org/3/library/io.html#io.IOBase.readlines + :param hint: 要读取的字符数 + :return: 文本内容所有行组成的列表 + """ + + if not self.readable(): + raise OSError(f"File '{self._file.fileName()}' is not Readable.") + + if hint <= 0 or hint is None: + temp = str(self._file.readAll(), encoding=self.encoding) + all_lines = temp.splitlines(keepends=True) + else: + all_lines = [] + char_num = 0 + while char_num <= hint and not self._file.atEnd(): + new_line = self.readline() + all_lines.append(new_line) + char_num += len(new_line) + + return all_lines + + def close(self): + self._file.close() + + +if __name__ == "__main__": + with OpenQFile(b"./test.txt", "rt", encoding="gbk") as f: + print(f.read(11)) + # print(f.readline()) + # lines = f.readlines() + # print(lines) + + print("-----------") + + with open("./test.txt", "rt", encoding="gbk") as f: + print(f.read(11)) + # print(f.readline()) + # lines = f.readlines() + # print(lines) + + # f.read() # 离开 with 语句块后文件已经被关闭,无法再读 From c1c1e0f24b1936fd950d9a907a35c8650a202f3c Mon Sep 17 00:00:00 2001 From: muzing Date: Tue, 21 Nov 2023 17:39:37 +0800 Subject: [PATCH 06/13] Usual update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新次级依赖项版本; 更新README中Poetry工具命令用法; --- README.md | 4 ++-- poetry.lock | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a955eba..6d2fbc7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -logo +logo # PySide6 代码式教程 @@ -47,7 +47,7 @@ 1. 确保 Python 版本与 [pyproject.toml](./pyproject.toml) 中要求的一致 2. 按[官方文档](https://python-poetry.org/docs/#installation)提示安装 Poetry 3. 创建虚拟环境:`poetry env use /full/path/to/python`(注意替换路径) -4. 安装依赖:`poetry install --no-dev` +4. 安装依赖:`poetry install --no-root --only main` 5. 使用该虚拟环境: `poetry shell`(或在 PyCharm 等 IDE 中配置) > 更多 Poetry 使用方法信息,请参阅其[官方文档](https://python-poetry.org/docs/)。 diff --git a/poetry.lock b/poetry.lock index 40ba8e8..8e14f5c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "black" @@ -137,13 +137,13 @@ reference = "tsinghua_mirror" [[package]] name = "identify" -version = "2.5.31" +version = "2.5.32" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"}, - {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"}, + {file = "identify-2.5.32-py2.py3-none-any.whl", hash = "sha256:0b7656ef6cba81664b783352c73f8c24b39cf82f926f78f4550eda928e5e0545"}, + {file = "identify-2.5.32.tar.gz", hash = "sha256:5d9979348ec1a21c768ae07e0a652924538e8bce67313a73cb0f681cf08ba407"}, ] [package.extras] @@ -470,17 +470,17 @@ reference = "tsinghua_mirror" [[package]] name = "setuptools" -version = "68.2.2" +version = "69.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, + {file = "setuptools-69.0.0-py3-none-any.whl", hash = "sha256:eb03b43f23910c5fd0909cb677ad017cd9531f493d27f8b3f5316ff1fb07390e"}, + {file = "setuptools-69.0.0.tar.gz", hash = "sha256:4c65d4f7891e5b046e9146913b87098144de2ca2128fbc10135b8556a6ddd946"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] @@ -567,4 +567,4 @@ reference = "tsinghua_mirror" [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "8ed6efe1986d4fadfbbbff50839852501ccceb26716d747dedfcd8cc85f0e283" +content-hash = "f0935cd97597e29fa2a4be1db5b3fe0ae0c1851311556dc48627ddf5460c3875" From 2ae01b5af598c61f314aa6374c9829fab3fd5840 Mon Sep 17 00:00:00 2001 From: muzing Date: Tue, 21 Nov 2023 17:42:29 +0800 Subject: [PATCH 07/13] Update `open_qfile.py` --- .../open_qfile.py" | 104 ++++++++++-------- 1 file changed, 61 insertions(+), 43 deletions(-) diff --git "a/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" "b/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" index 9be3324..d2724a8 100644 --- "a/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" +++ "b/07-Packaging-\350\265\204\346\272\220\347\256\241\347\220\206\344\270\216\346\211\223\345\214\205/01-\350\265\204\346\272\220\347\256\241\347\220\206/open_qfile.py" @@ -1,31 +1,44 @@ import locale import os +import pathlib import warnings from typing import Optional, Union from PySide6.QtCore import QFile, QIODevice -class OpenQFile: +class QtFileOpen: """ - 用于以QFile形式打开文件的上下文管理器 \n - 使支持 Python 的 with 风格 \n + 通过 QFile 读写文件的上下文管理器 \n + 使与 Python 的 with 语句风格统一 \n + + 使用举例: + + with QtFileOpen("./test.txt", "rt", encoding="utf-8") as f: + print(f.read()) """ - def __init__(self, file: Union[str, bytes, os.PathLike[str]], - mode="r", - encoding: Optional[str] = None): + def __init__( + self, + file: Union[str, bytes, os.PathLike[str]], + mode="r", + encoding: Optional[str] = None, + ): """ :param file: 文件路径 :param mode: 打开模式(暂时只支持文本读取) :param encoding: 文本文件编码 """ + # 预处理文件路径,防止在 Windows 平台下 QFile 只能处理 '/' 导致的问题 + file_path = self.deal_path(file) + print(file_path) + # 分析模式是否合法、返回正确的 FileIo 类实例 # https://docs.python.org/zh-cn/3/library/functions.html#open if "b" not in mode: # 文本模式 - self.io_obj = PyQTextFileIo(file, mode, encoding) + self.io_obj = PyQTextFileIo(file_path, mode, encoding) else: # 二进制模式(暂不支持) # self.io_obj = PyQByteFileIo(file, mode) @@ -37,6 +50,20 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): self.io_obj.close() + @classmethod + def deal_path(cls, path) -> str: + """ + 预处理文件路径,确保使用 / 风格 + :param path: 文件路径 + :return: 使用正斜杠(/)的路径字符串 + """ + + # 若路径以字节串传入,则先处理成字符串 + if isinstance(path, bytes): + path = str(path, encoding=locale.getencoding()) + + return str(pathlib.PurePath(path).as_posix()) + class PyQTextFileIo: """ @@ -44,6 +71,23 @@ class PyQTextFileIo: 目前只支持读取,不支持写入 """ + def __init__( + self, + file: Union[str, bytes, os.PathLike[str]], + mode, + encoding: Optional[str] = None, + ): + self._file = QFile(file) + + if encoding is not None: + self.encoding = encoding + else: + # 用户未指定编码,则使用当前平台默认编码 + self.encoding = locale.getencoding() + + self.mode = self._parse_mode(mode) + self._file.open(self.mode) + @classmethod def _parse_mode(cls, py_mode: str) -> QIODevice: """ @@ -68,26 +112,12 @@ def _parse_mode(cls, py_mode: str) -> QIODevice: return qt_mode - def __init__(self, file: Union[str, bytes, os.PathLike[str]], - mode, - encoding: Optional[str] = None): - - self._file = QFile(file) # TODO 处理 QFile 只接受`/`风格路径可能导致 Windows 平台异常的问题 - - if encoding is not None: - self.encoding = encoding - else: - # 用户未指定编码,则使用当前平台默认编码 - self.encoding = locale.getencoding() - - self.mode = self._parse_mode(mode) - self._file.open(self.mode) - def readable(self) -> bool: """ 当前文件是否可读 \n :return: isReadable """ + return self._file.isReadable() def read(self, size: int = -1) -> str: @@ -112,7 +142,7 @@ def read(self, size: int = -1) -> str: return text - def readline(self, size: int = - 1, /) -> str: + def readline(self, size: int = -1, /) -> str: """ 模仿 io.TextIOBase.readline 的行为,读取文件中的一行。 \n https://docs.python.org/3/library/io.html#io.TextIOBase.readline @@ -124,7 +154,9 @@ def readline(self, size: int = - 1, /) -> str: raise OSError(f"File '{self._file.fileName()}' is not Readable.") if self._file.atEnd(): - warnings.warn(f"Trying to read a line at the end of the file '{self._file.fileName()}'.") + warnings.warn( + f"Trying to read a line at the end of the file '{self._file.fileName()}'." + ) return "" else: if size == 0: @@ -161,23 +193,9 @@ def readlines(self, hint: int = -1, /) -> list[str]: return all_lines - def close(self): - self._file.close() - - -if __name__ == "__main__": - with OpenQFile(b"./test.txt", "rt", encoding="gbk") as f: - print(f.read(11)) - # print(f.readline()) - # lines = f.readlines() - # print(lines) - - print("-----------") - - with open("./test.txt", "rt", encoding="gbk") as f: - print(f.read(11)) - # print(f.readline()) - # lines = f.readlines() - # print(lines) + def close(self) -> None: + """ + 关闭打开的文件对象 + """ - # f.read() # 离开 with 语句块后文件已经被关闭,无法再读 + self._file.close() From 460e376a02afbf655c07ea0023a047c8ca1871f0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 20:45:30 +0000 Subject: [PATCH 08/13] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.10.1 → 24.1.1](https://github.com/psf/black/compare/23.10.1...24.1.1) - [github.com/pycqa/isort: 5.12.0 → 5.13.2](https://github.com/pycqa/isort/compare/5.12.0...5.13.2) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b5dd06f..3f5b689 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,13 +10,13 @@ repos: - id: end-of-file-fixer - repo: https://github.com/psf/black - rev: 23.10.1 + rev: 24.1.1 hooks: - id: black args: [--config, "./pyproject.toml"] - repo: https://github.com/pycqa/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort args: [--settings-path, "./pyproject.toml"] From 64704af509898f44cc77e73a7ad367d616c4fe0b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 20:45:43 +0000 Subject: [PATCH 09/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ...00\344\270\252PySide6\347\250\213\345\272\217.py" | 4 +++- .../10-QWidget-\345\205\211\346\240\207.py" | 4 +++- .../07-QLineEdit-\345\205\211\346\240\207.py" | 4 +++- ...0\247\206\345\233\276\346\216\247\344\273\266.py" | 4 +++- ...5\274\217\343\200\201\345\217\252\350\257\273.py" | 4 +++- ...6\230\276\347\244\272\350\241\214\345\217\267.py" | 4 +++- ...6\225\260\345\200\274\346\226\207\346\234\254.py" | 4 +++- ...3\200\201\345\211\215\345\220\216\347\274\200.py" | 4 +++- ...4\273\213\344\270\216\345\210\233\345\273\272.py" | 4 +++- ...235\241\347\233\256\346\223\215\344\275\234-2.py" | 4 +++- ...4\273\213\344\270\216\345\210\233\345\273\272.py" | 4 +++- ...5\212\237\350\203\275\344\275\234\347\224\250.py" | 8 ++++++-- ...4\273\213\344\270\216\345\210\233\345\273\272.py" | 8 ++++++-- ...6\234\254\343\200\201\347\233\256\345\275\225.py" | 12 +++++++++--- ...1\235\231\346\200\201\346\226\271\346\263\225.py" | 9 +++++++-- 15 files changed, 61 insertions(+), 20 deletions(-) diff --git "a/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/01-HelloWorld-\347\254\254\344\270\200\344\270\252PySide6\347\250\213\345\272\217.py" "b/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/01-HelloWorld-\347\254\254\344\270\200\344\270\252PySide6\347\250\213\345\272\217.py" index ce51959..c5ac625 100644 --- "a/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/01-HelloWorld-\347\254\254\344\270\200\344\270\252PySide6\347\250\213\345\272\217.py" +++ "b/01-HelloWorld-\345\237\272\346\234\254\347\273\223\346\236\204/01-HelloWorld-\347\254\254\344\270\200\344\270\252PySide6\347\250\213\345\272\217.py" @@ -37,7 +37,9 @@ def magic(self) -> None: if __name__ == "__main__": - app = QtWidgets.QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化 + app = QtWidgets.QApplication( + sys.argv + ) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化 widget = MyWidget() # 实例化一个MyWidget类对象 widget.show() # 显示窗口 sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程 diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/10-QWidget-\345\205\211\346\240\207.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/10-QWidget-\345\205\211\346\240\207.py" index 9c286a6..8e84f4d 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/10-QWidget-\345\205\211\346\240\207.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/01-QWidget-\346\216\247\344\273\266\347\232\204\345\237\272\347\261\273/10-QWidget-\345\205\211\346\240\207.py" @@ -57,7 +57,9 @@ def test_01(self) -> None: # 设置为自定义图案光标 pixmap = QtGui.QPixmap("../../Resources/Icons/snowflake_128px.ico").scaled(52, 52) - my_cursor = QtGui.QCursor(pixmap, 26, 26) # 以图片像素点位置26,26为热点(光标实际所在位置坐标) + my_cursor = QtGui.QCursor( + pixmap, 26, 26 + ) # 以图片像素点位置26,26为热点(光标实际所在位置坐标) self.setCursor(my_cursor) # 设置label中的光标为Qt内置的其他光标 diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/03-QLineEdit-\345\215\225\350\241\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/07-QLineEdit-\345\205\211\346\240\207.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/03-QLineEdit-\345\215\225\350\241\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/07-QLineEdit-\345\205\211\346\240\207.py" index 375a794..8347a1a 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/03-QLineEdit-\345\215\225\350\241\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/07-QLineEdit-\345\205\211\346\240\207.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/03-QLineEdit-\345\215\225\350\241\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/07-QLineEdit-\345\205\211\346\240\207.py" @@ -74,7 +74,9 @@ def setup_ui(self) -> None: pos_layout = QtWidgets.QFormLayout() pos_layout.addRow(QtWidgets.QLabel("光标当前位于:"), self.pos_line_edit) pos_layout.addRow(QtWidgets.QLabel("将光标设置到:"), self.set_pos_spinbox) - pos_layout.addRow(QtWidgets.QLabel(f"{self.point.toTuple()}处的光标位于"), self.pos_at_label) + pos_layout.addRow( + QtWidgets.QLabel(f"{self.point.toTuple()}处的光标位于"), self.pos_at_label + ) pos_groupbox.setLayout(pos_layout) # ================ 光标移动风格 ======================= diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/07-QScrollArea-\346\273\232\345\212\250\345\214\272\345\237\237/02-QScrollArea-\350\247\206\345\233\276\346\216\247\344\273\266.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/07-QScrollArea-\346\273\232\345\212\250\345\214\272\345\237\237/02-QScrollArea-\350\247\206\345\233\276\346\216\247\344\273\266.py" index 1fc69ba..cc14d1c 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/07-QScrollArea-\346\273\232\345\212\250\345\214\272\345\237\237/02-QScrollArea-\350\247\206\345\233\276\346\216\247\344\273\266.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/07-QScrollArea-\346\273\232\345\212\250\345\214\272\345\237\237/02-QScrollArea-\350\247\206\345\233\276\346\216\247\344\273\266.py" @@ -77,7 +77,9 @@ def test_01(self) -> None: self.scroll_area.widget().resize(200, 400) # 尺寸小于滚动区域尺寸 # 设置对齐方式 - self.scroll_area.setAlignment(Qt.AlignHCenter | Qt.AlignBottom) # 设置为水平居中、垂直靠底部对齐 + self.scroll_area.setAlignment( + Qt.AlignHCenter | Qt.AlignBottom + ) # 设置为水平居中、垂直靠底部对齐 def test_02(self) -> None: """测试尺寸控制、确保可见功能""" diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/02-QPlainTextEdit-\346\215\242\350\241\214\346\226\271\345\274\217\343\200\201\345\217\252\350\257\273.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/02-QPlainTextEdit-\346\215\242\350\241\214\346\226\271\345\274\217\343\200\201\345\217\252\350\257\273.py" index 65e3035..8bef759 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/02-QPlainTextEdit-\346\215\242\350\241\214\346\226\271\345\274\217\343\200\201\345\217\252\350\257\273.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/02-QPlainTextEdit-\346\215\242\350\241\214\346\226\271\345\274\217\343\200\201\345\217\252\350\257\273.py" @@ -68,7 +68,9 @@ def test_01(self) -> None: """测试自动换行功能""" # 设置换行模式 - self.pte.setLineWrapMode(QtWidgets.QPlainTextEdit.LineWrapMode.WidgetWidth) # 自动换行(默认值) + self.pte.setLineWrapMode( + QtWidgets.QPlainTextEdit.LineWrapMode.WidgetWidth + ) # 自动换行(默认值) # self.pte.setLineWrapMode(QtWidgets.QPlainTextEdit.LineWrapMode.NoWrap) # 关闭自动换行 print(self.pte.lineWrapMode()) # 获取换行模式 diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/08-QPlainText-\346\241\210\344\276\213-\346\230\276\347\244\272\350\241\214\345\217\267.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/08-QPlainText-\346\241\210\344\276\213-\346\230\276\347\244\272\350\241\214\345\217\267.py" index 2b88baf..76811b1 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/08-QPlainText-\346\241\210\344\276\213-\346\230\276\347\244\272\350\241\214\345\217\267.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/08-TextEdit-\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\270\216\351\230\205\350\257\273\345\231\250/01-QPlainTextEdit-\347\272\257\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250/08-QPlainText-\346\241\210\344\276\213-\346\230\276\347\244\272\350\241\214\345\217\267.py" @@ -23,7 +23,9 @@ def setup_ui(self) -> None: self.pte = QtWidgets.QPlainTextEdit(self) self.pte.resize(350, 400) self.pte.move(150, 80) - self.pte.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn) # 始终显示滚动条 + self.pte.setVerticalScrollBarPolicy( + QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn + ) # 始终显示滚动条 # 用于限制line_num_label位置尺寸的父控件 line_num_widget = QtWidgets.QWidget(self) diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/01-QAbstractSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206\346\212\275\350\261\241\345\237\272\347\261\273/02-QAbstractSpinBox-\350\216\267\345\217\226\346\226\207\346\234\254\343\200\201\345\257\271\351\275\220\346\226\271\345\274\217\343\200\201\345\215\203\345\210\206\347\254\246\343\200\201\347\211\271\346\225\260\345\200\274\346\226\207\346\234\254.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/01-QAbstractSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206\346\212\275\350\261\241\345\237\272\347\261\273/02-QAbstractSpinBox-\350\216\267\345\217\226\346\226\207\346\234\254\343\200\201\345\257\271\351\275\220\346\226\271\345\274\217\343\200\201\345\215\203\345\210\206\347\254\246\343\200\201\347\211\271\346\225\260\345\200\274\346\226\207\346\234\254.py" index bee6b21..edb88da 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/01-QAbstractSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206\346\212\275\350\261\241\345\237\272\347\261\273/02-QAbstractSpinBox-\350\216\267\345\217\226\346\226\207\346\234\254\343\200\201\345\257\271\351\275\220\346\226\271\345\274\217\343\200\201\345\215\203\345\210\206\347\254\246\343\200\201\347\211\271\346\225\260\345\200\274\346\226\207\346\234\254.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/01-QAbstractSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206\346\212\275\350\261\241\345\237\272\347\261\273/02-QAbstractSpinBox-\350\216\267\345\217\226\346\226\207\346\234\254\343\200\201\345\257\271\351\275\220\346\226\271\345\274\217\343\200\201\345\215\203\345\210\206\347\254\246\343\200\201\347\211\271\346\225\260\345\200\274\346\226\207\346\234\254.py" @@ -50,7 +50,9 @@ def setup_ui(self) -> None: btn.clicked.connect(lambda: print(spin_box.text())) # type: ignore # =================================== 文本对齐方式 =================================== - spin_box.setAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter) # 更改为水平居中对齐,默认为左对齐 + spin_box.setAlignment( + QtCore.Qt.AlignmentFlag.AlignHCenter + ) # 更改为水平居中对齐,默认为左对齐 # ==================================== 千分符 =================================== spin_box.setGroupSeparatorShown(True) # 显示千分符 diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/02-QSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/03-QSpinBox-\346\225\260\345\200\274\343\200\201\346\225\260\345\200\274\346\230\276\347\244\272\350\277\233\345\210\266\343\200\201\345\211\215\345\220\216\347\274\200.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/02-QSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/03-QSpinBox-\346\225\260\345\200\274\343\200\201\346\225\260\345\200\274\346\230\276\347\244\272\350\277\233\345\210\266\343\200\201\345\211\215\345\220\216\347\274\200.py" index 3c272fd..474cd96 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/02-QSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/03-QSpinBox-\346\225\260\345\200\274\343\200\201\346\225\260\345\200\274\346\230\276\347\244\272\350\277\233\345\210\266\343\200\201\345\211\215\345\220\216\347\274\200.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/02-QSpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/03-QSpinBox-\346\225\260\345\200\274\343\200\201\346\225\260\345\200\274\346\230\276\347\244\272\350\277\233\345\210\266\343\200\201\345\211\215\345\220\216\347\274\200.py" @@ -58,7 +58,9 @@ def setup_ui(self) -> None: spinbox.setSuffix(" cm") # 设置后缀 # spinbox.setPrefix("$ ") # 设置前缀 print(f"完整文本为{spinbox.text()}") # 获取文本时会获取到包含前后缀的完整文本 - print(f"数值为{spinbox.text().removesuffix(spinbox.suffix())}") # Python3.9提供的移除后缀方法 + print( + f"数值为{spinbox.text().removesuffix(spinbox.suffix())}" + ) # Python3.9提供的移除后缀方法 print(f"数值为{spinbox.cleanText()}") diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/04-QDateTimeEdit-\346\227\245\346\234\237\346\227\266\351\227\264\347\274\226\350\276\221\345\231\250/01-QDateTimeEdit-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/04-QDateTimeEdit-\346\227\245\346\234\237\346\227\266\351\227\264\347\274\226\350\276\221\345\231\250/01-QDateTimeEdit-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" index 94328fe..f733d1f 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/04-QDateTimeEdit-\346\227\245\346\234\237\346\227\266\351\227\264\347\274\226\350\276\221\345\231\250/01-QDateTimeEdit-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/10-SpinBox-\346\225\260\345\200\274\350\256\276\345\256\232\346\241\206/04-QDateTimeEdit-\346\227\245\346\234\237\346\227\266\351\227\264\347\274\226\350\276\221\345\231\250/01-QDateTimeEdit-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" @@ -36,7 +36,9 @@ def setup_ui(self) -> None: # dte = QtWidgets.QDateTimeEdit(self) # 创建空的日期时间编辑器 # dte = QtWidgets.QDateTimeEdit(my_time, self) # 使用QTime初始化 # dte = QtWidgets.QDateTimeEdit(my_date, self) # 使用QDate初始化 - dte = QtWidgets.QDateTimeEdit(QtCore.QDateTime.currentDateTime(), self) # 使用QDateTime初始化 + dte = QtWidgets.QDateTimeEdit( + QtCore.QDateTime.currentDateTime(), self + ) # 使用QDateTime初始化 dte.move(200, 200) diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/03-QComboBox-\346\235\241\347\233\256\346\223\215\344\275\234-2.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/03-QComboBox-\346\235\241\347\233\256\346\223\215\344\275\234-2.py" index 974c15e..f3d2a8d 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/03-QComboBox-\346\235\241\347\233\256\346\223\215\344\275\234-2.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/01-QComboBox-\347\273\204\345\220\210\344\270\213\346\213\211\346\241\206/03-QComboBox-\346\235\241\347\233\256\346\223\215\344\275\234-2.py" @@ -87,7 +87,9 @@ def setup_ui(self) -> None: cbb.setEditText("000") # 将当前文本设置为00,而不影响其他条目 # 设置尺寸调整策略 - cbb.setSizeAdjustPolicy(QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToContents) # 总是根据内容调整尺寸 + cbb.setSizeAdjustPolicy( + QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToContents + ) # 总是根据内容调整尺寸 # 限制最小字符数 cbb.setMinimumContentsLength(3) diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/01-QFontComboBox-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/01-QFontComboBox-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" index e1d4f48..31d61e9 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/01-QFontComboBox-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/01-QFontComboBox-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" @@ -29,7 +29,9 @@ def setup_ui(self) -> None: fcb = QtWidgets.QFontComboBox() # 创建示例文本并连接信号,当用户选择字体改变时,对应改变示例文本的字体 - text_label = QtWidgets.QLabel("我能吞下玻璃而不伤身体\nThe quick brown fox jumps over the lazy dog.") + text_label = QtWidgets.QLabel( + "我能吞下玻璃而不伤身体\nThe quick brown fox jumps over the lazy dog." + ) fcb.currentFontChanged.connect(text_label.setFont) # type: ignore # 使用布局管理器布局界面 diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\212\237\350\203\275\344\275\234\347\224\250.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\212\237\350\203\275\344\275\234\347\224\250.py" index 6849a9c..f60acfe 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\212\237\350\203\275\344\275\234\347\224\250.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/11-ComboBox-\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\255\227\344\275\223\344\270\213\346\213\211\346\241\206/02-QFontComboBox-\345\212\237\350\203\275\344\275\234\347\224\250.py" @@ -56,7 +56,9 @@ def setup_ui(self) -> None: fcb = QtWidgets.QFontComboBox() # 创建示例文本并连接信号,当用户选择字体改变时,对应改变示例文本的字体 - text_label = QtWidgets.QLabel("我能吞下玻璃而不伤身体。\nThe quick brown fox jumps over the lazy dog.") + text_label = QtWidgets.QLabel( + "我能吞下玻璃而不伤身体。\nThe quick brown fox jumps over the lazy dog." + ) fcb.currentFontChanged.connect(text_label.setFont) # type: ignore # 使用布局管理器布局界面 @@ -66,7 +68,9 @@ def setup_ui(self) -> None: self.setLayout(layout) # ======================== 设置显示字体 ======================== - fcb.setDisplayFont("Arial", QtGui.QFont("Arial Black", italic=True)) # 注意在本地测试时使用本机已安装的字体 + fcb.setDisplayFont( + "Arial", QtGui.QFont("Arial Black", italic=True) + ) # 注意在本地测试时使用本机已安装的字体 # 此时在combobox中的"Arial"条目是用黑体斜体显示的,而非原来的Arial字体 # ======================== 设置示例文本、书写系统 ======================== diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/01-QFileDialog-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/01-QFileDialog-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" index eaf3bcd..3d2b88b 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/01-QFileDialog-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/01-QFileDialog-\347\256\200\344\273\213\344\270\216\345\210\233\345\273\272.py" @@ -28,8 +28,12 @@ def setup_dialog(self) -> None: """配置对话框属性功能""" self.dialog.setAcceptMode(QtWidgets.QFileDialog.AcceptMode.AcceptOpen) # 打开模式 self.dialog.setFileMode(QtWidgets.QFileDialog.FileMode.ExistingFiles) # 选择现有文件 - self.dialog.setLabelText(QtWidgets.QFileDialog.DialogLabel.Accept, "选择") # 为「接受」按键指定文本 - self.dialog.setLabelText(QtWidgets.QFileDialog.DialogLabel.Reject, "取消") # 为「拒绝」按键指定文本 + self.dialog.setLabelText( + QtWidgets.QFileDialog.DialogLabel.Accept, "选择" + ) # 为「接受」按键指定文本 + self.dialog.setLabelText( + QtWidgets.QFileDialog.DialogLabel.Reject, "取消" + ) # 为「拒绝」按键指定文本 def setup_ui(self) -> None: """设置界面""" diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/03-QFileDialog-\351\273\230\350\256\244\345\220\216\347\274\200\345\220\215\343\200\201\346\240\207\347\255\276\346\226\207\346\234\254\343\200\201\347\233\256\345\275\225.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/03-QFileDialog-\351\273\230\350\256\244\345\220\216\347\274\200\345\220\215\343\200\201\346\240\207\347\255\276\346\226\207\346\234\254\343\200\201\347\233\256\345\275\225.py" index 60742ac..556c1fc 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/03-QFileDialog-\351\273\230\350\256\244\345\220\216\347\274\200\345\220\215\343\200\201\346\240\207\347\255\276\346\226\207\346\234\254\343\200\201\347\233\256\345\275\225.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/03-QFileDialog-\346\226\207\344\273\266\345\257\271\350\257\235\346\241\206/03-QFileDialog-\351\273\230\350\256\244\345\220\216\347\274\200\345\220\215\343\200\201\346\240\207\347\255\276\346\226\207\346\234\254\343\200\201\347\233\256\345\275\225.py" @@ -38,14 +38,20 @@ def __init__(self, *args, **kwargs): def setup_dialog(self) -> None: """设置文件对话框""" - self.dialog.setAcceptMode(QtWidgets.QFileDialog.AcceptMode.AcceptSave) # 文件对话框用于保存文件 + self.dialog.setAcceptMode( + QtWidgets.QFileDialog.AcceptMode.AcceptSave + ) # 文件对话框用于保存文件 # 默认后缀名 self.dialog.setDefaultSuffix("txt") # 设置默认后缀名 # 标签文本 - self.dialog.setLabelText(QtWidgets.QFileDialog.DialogLabel.Accept, "保存") # 将Accept按钮文本设置为保存 - self.dialog.setLabelText(QtWidgets.QFileDialog.DialogLabel.Reject, "取消") # 将Reject标签文本设置为取消 + self.dialog.setLabelText( + QtWidgets.QFileDialog.DialogLabel.Accept, "保存" + ) # 将Accept按钮文本设置为保存 + self.dialog.setLabelText( + QtWidgets.QFileDialog.DialogLabel.Reject, "取消" + ) # 将Reject标签文本设置为取消 def setup_ui(self) -> None: """设置界面""" diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/05-QMessageBox-\344\277\241\346\201\257\346\217\220\347\244\272\346\241\206/04-QMessageBox-\351\235\231\346\200\201\346\226\271\346\263\225.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/05-QMessageBox-\344\277\241\346\201\257\346\217\220\347\244\272\346\241\206/04-QMessageBox-\351\235\231\346\200\201\346\226\271\346\263\225.py" index 96def6b..3b69be4 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/05-QMessageBox-\344\277\241\346\201\257\346\217\220\347\244\272\346\241\206/04-QMessageBox-\351\235\231\346\200\201\346\226\271\346\263\225.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/12-Dialog-\345\257\271\350\257\235\346\241\206/05-QMessageBox-\344\277\241\346\201\257\346\217\220\347\244\272\346\241\206/04-QMessageBox-\351\235\231\346\200\201\346\226\271\346\263\225.py" @@ -70,7 +70,9 @@ def test_static(self): """测试QMessageBox的静态方法""" self.about_btn.clicked.connect( - lambda: QMessageBox.about(self, "关于此程序", "本程序为PySide6 Code Tutorial中的一个案例") + lambda: QMessageBox.about( + self, "关于此程序", "本程序为PySide6 Code Tutorial中的一个案例" + ) ) # type: ignore self.about_qt_btn.clicked.connect(lambda: QMessageBox.aboutQt(self)) # type: ignore @@ -99,7 +101,10 @@ def show_info_dlg() -> None: def show_warn_dlg() -> None: """self.warning_btn对应的槽函数""" result = QMessageBox.warning( - self, "静态方法-警告", "警告:直接退出将不会保存修改", QMessageBox.StandardButton.Discard + self, + "静态方法-警告", + "警告:直接退出将不会保存修改", + QMessageBox.StandardButton.Discard, ) self.label.setText(f"用户选择了:{user_result_dict[result]}") self.label.adjustSize() From dbfa3ffd1f6467eda101827d8f410fa6425c6e64 Mon Sep 17 00:00:00 2001 From: muzing Date: Sat, 3 Feb 2024 17:38:07 +0800 Subject: [PATCH 10/13] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新与调整依赖项及其描述文件; --- README.md | 1 - poetry.lock | 242 ++++++++++++++++++------------------------- pyproject.toml | 12 +-- requirements.txt | 6 +- requirements_dev.txt | 17 --- 5 files changed, 107 insertions(+), 171 deletions(-) delete mode 100644 requirements_dev.txt diff --git a/README.md b/README.md index 6d2fbc7..a6b6e92 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,6 @@ | 目录/文件 | 描述 | |------------------------------------------------|-------------------| | [requirements.txt](./requirements.txt) | 依赖项,运行本项目必备 | -| [requirements_dev.txt](./requirements_dev.txt) | 开发依赖项,为本项目提交贡献时需要 | | [pyproject.toml](./pyproject.toml) | 项目配置文件 | | [poetry.lock](./poetry.lock) | Poetry 依赖项版本约束文件 | | [.gitignore](./.gitignore) | git 忽略提交规则 | diff --git a/poetry.lock b/poetry.lock index 8e14f5c..e650ddf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,29 +2,33 @@ [[package]] name = "black" -version = "23.11.0" +version = "24.1.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, - {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, - {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, - {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, - {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, - {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, - {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, - {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, - {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, - {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, - {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, - {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, - {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, - {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, - {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, - {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, - {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, - {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [package.dependencies] @@ -38,7 +42,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -100,13 +104,13 @@ reference = "tsinghua_mirror" [[package]] name = "distlib" -version = "0.3.7" +version = "0.3.8" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] [package.source] @@ -137,13 +141,13 @@ reference = "tsinghua_mirror" [[package]] name = "identify" -version = "2.5.32" +version = "2.5.33" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.32-py2.py3-none-any.whl", hash = "sha256:0b7656ef6cba81664b783352c73f8c24b39cf82f926f78f4550eda928e5e0545"}, - {file = "identify-2.5.32.tar.gz", hash = "sha256:5d9979348ec1a21c768ae07e0a652924538e8bce67313a73cb0f681cf08ba407"}, + {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, + {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, ] [package.extras] @@ -156,20 +160,17 @@ reference = "tsinghua_mirror" [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [package.source] type = "legacy" @@ -178,38 +179,38 @@ reference = "tsinghua_mirror" [[package]] name = "mypy" -version = "1.7.0" +version = "1.8.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5da84d7bf257fd8f66b4f759a904fd2c5a765f70d8b52dde62b521972a0a2357"}, - {file = "mypy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a3637c03f4025f6405737570d6cbfa4f1400eb3c649317634d273687a09ffc2f"}, - {file = "mypy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b633f188fc5ae1b6edca39dae566974d7ef4e9aaaae00bc36efe1f855e5173ac"}, - {file = "mypy-1.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed9a3997b90c6f891138e3f83fb8f475c74db4ccaa942a1c7bf99e83a989a1"}, - {file = "mypy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fe46e96ae319df21359c8db77e1aecac8e5949da4773c0274c0ef3d8d1268a9"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:df67fbeb666ee8828f675fee724cc2cbd2e4828cc3df56703e02fe6a421b7401"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a79cdc12a02eb526d808a32a934c6fe6df07b05f3573d210e41808020aed8b5d"}, - {file = "mypy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65f385a6f43211effe8c682e8ec3f55d79391f70a201575def73d08db68ead1"}, - {file = "mypy-1.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e81ffd120ee24959b449b647c4b2fbfcf8acf3465e082b8d58fd6c4c2b27e46"}, - {file = "mypy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:f29386804c3577c83d76520abf18cfcd7d68264c7e431c5907d250ab502658ee"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87c076c174e2c7ef8ab416c4e252d94c08cd4980a10967754f91571070bf5fbe"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cb8d5f6d0fcd9e708bb190b224089e45902cacef6f6915481806b0c77f7786d"}, - {file = "mypy-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93e76c2256aa50d9c82a88e2f569232e9862c9982095f6d54e13509f01222fc"}, - {file = "mypy-1.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cddee95dea7990e2215576fae95f6b78a8c12f4c089d7e4367564704e99118d3"}, - {file = "mypy-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d01921dbd691c4061a3e2ecdbfbfad029410c5c2b1ee88946bf45c62c6c91210"}, - {file = "mypy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:185cff9b9a7fec1f9f7d8352dff8a4c713b2e3eea9c6c4b5ff7f0edf46b91e41"}, - {file = "mypy-1.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7b1e399c47b18feb6f8ad4a3eef3813e28c1e871ea7d4ea5d444b2ac03c418"}, - {file = "mypy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9fe455ad58a20ec68599139ed1113b21f977b536a91b42bef3ffed5cce7391"}, - {file = "mypy-1.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d0fa29919d2e720c8dbaf07d5578f93d7b313c3e9954c8ec05b6d83da592e5d9"}, - {file = "mypy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b53655a295c1ed1af9e96b462a736bf083adba7b314ae775563e3fb4e6795f5"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1b06b4b109e342f7dccc9efda965fc3970a604db70f8560ddfdee7ef19afb05"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf7a2f0a6907f231d5e41adba1a82d7d88cf1f61a70335889412dec99feeb0f8"}, - {file = "mypy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551d4a0cdcbd1d2cccdcc7cb516bb4ae888794929f5b040bb51aae1846062901"}, - {file = "mypy-1.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55d28d7963bef00c330cb6461db80b0b72afe2f3c4e2963c99517cf06454e665"}, - {file = "mypy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:870bd1ffc8a5862e593185a4c169804f2744112b4a7c55b93eb50f48e7a77010"}, - {file = "mypy-1.7.0-py3-none-any.whl", hash = "sha256:96650d9a4c651bc2a4991cf46f100973f656d69edc7faf91844e87fe627f7e96"}, - {file = "mypy-1.7.0.tar.gz", hash = "sha256:1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, + {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, + {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, + {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, + {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, + {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, + {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, + {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, + {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, + {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, + {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, + {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, + {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, + {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, + {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, + {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, + {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, + {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, ] [package.dependencies] @@ -281,13 +282,13 @@ reference = "tsinghua_mirror" [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [package.source] @@ -297,18 +298,18 @@ reference = "tsinghua_mirror" [[package]] name = "platformdirs" -version = "3.11.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, - {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [package.source] type = "legacy" @@ -317,13 +318,13 @@ reference = "tsinghua_mirror" [[package]] name = "pre-commit" -version = "3.5.0" +version = "3.6.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, - {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, + {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, + {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, ] [package.dependencies] @@ -338,66 +339,21 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua_mirror" -[[package]] -name = "pyside6" -version = "6.6.0" -description = "Python bindings for the Qt cross-platform application and UI framework" -optional = false -python-versions = "<3.13,>=3.8" -files = [ - {file = "PySide6-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:8103f14ed46a05e81acccbfc8388e3321e392fe54f3aa4a13336bd2ed8af5cd4"}, - {file = "PySide6-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:d487eab0f9bfc5c9141b474093e16207ff48cd9335e6465a01deb8dff0693fbc"}, - {file = "PySide6-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:f40917b7a0c5c7f0c7faaa87e66ffa3b58d9d1d3d977d30fc07e193b82dd6749"}, - {file = "PySide6-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:d41dfcfa32c89502cdaa20206b7e2aba199072f94b424bc6a4d6f50b10f4eb5a"}, -] - -[package.dependencies] -PySide6-Addons = "6.6.0" -PySide6-Essentials = "6.6.0" -shiboken6 = "6.6.0" - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua_mirror" - -[[package]] -name = "pyside6-addons" -version = "6.6.0" -description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" -optional = false -python-versions = "<3.13,>=3.8" -files = [ - {file = "PySide6_Addons-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:82fe1bb6a1aabf5ab3d8632072dc908aa37fc75b4b46e520258c441bd6b103fb"}, - {file = "PySide6_Addons-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5c56e963b841aeaacbc9ca8ca34df45308818dbd6fc59faa2b5a00a299e9892b"}, - {file = "PySide6_Addons-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:e145514a7c37ee3a6ad0ddd693f805ccff6fbd9640a24fb2ef6b7f852882d3e9"}, - {file = "PySide6_Addons-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:414864f7cfbdf8ac4c5a745566a515f18b6018d5730bf5489cc2716b5e1fcd9b"}, -] - -[package.dependencies] -PySide6-Essentials = "6.6.0" -shiboken6 = "6.6.0" - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua_mirror" - [[package]] name = "pyside6-essentials" -version = "6.6.0" +version = "6.6.1" description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" optional = false python-versions = "<3.13,>=3.8" files = [ - {file = "PySide6_Essentials-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:26d27e3e3a18acbc770a69a30774fd345414fe4932fcb89d2cfc4fc130c3eb33"}, - {file = "PySide6_Essentials-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:60284641619f964e1cb4d53cf3169d7a385e0378b74edb75610918d2aea1c4e5"}, - {file = "PySide6_Essentials-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:37d5d9c6ee696a17890f07e7ce1f88f890174bd4aca29f47922ecc959ab28352"}, - {file = "PySide6_Essentials-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:97bbe33f584a09cef6a3fbc1295fb0fd7acaac345bc0f5601bf45d41c91683ac"}, + {file = "PySide6_Essentials-6.6.1-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:0c8917b15236956957178a8c9854641b12b11dad79ba0caf26147119164c30cf"}, + {file = "PySide6_Essentials-6.6.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c7185616083eab6f42eaed598d97d49fac4f60ae2e7415194140d54f58c2b42c"}, + {file = "PySide6_Essentials-6.6.1-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:a383c3d60298392cfb621ec1a0cf24b4799321e6c5bbafc021d4cc8076ea1315"}, + {file = "PySide6_Essentials-6.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:13da926e9e9ee3e26e3f66883a9d5e43726ddee70cdabddca02a07aa1ccf9484"}, ] [package.dependencies] -shiboken6 = "6.6.0" +shiboken6 = "6.6.1" [package.source] type = "legacy" @@ -470,13 +426,13 @@ reference = "tsinghua_mirror" [[package]] name = "setuptools" -version = "69.0.0" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.0-py3-none-any.whl", hash = "sha256:eb03b43f23910c5fd0909cb677ad017cd9531f493d27f8b3f5316ff1fb07390e"}, - {file = "setuptools-69.0.0.tar.gz", hash = "sha256:4c65d4f7891e5b046e9146913b87098144de2ca2128fbc10135b8556a6ddd946"}, + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [package.extras] @@ -491,15 +447,15 @@ reference = "tsinghua_mirror" [[package]] name = "shiboken6" -version = "6.6.0" +version = "6.6.1" description = "Python/C++ bindings helper module" optional = false python-versions = "<3.13,>=3.8" files = [ - {file = "shiboken6-6.6.0-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:bf23c43e53ffe6097853666ced05358c6640c378e992902a36c4cf77efb0223b"}, - {file = "shiboken6-6.6.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:456b89fb4b323e0c5002d92e4d346b48bb4e709db801208df8a0d6b4f5efc33d"}, - {file = "shiboken6-6.6.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:fb8c683206c3365f9240fff7f908485384893b02efb089b69ff816b4390baa9a"}, - {file = "shiboken6-6.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:e62b2610b84f0ff7ed0181a4c535849cdc0654127097b5ef561cf0a33078f245"}, + {file = "shiboken6-6.6.1-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:d756fd1fa945b787e8eef142f2eb571da0b4c4dc2f2eec1a7c12a474a2cf84e4"}, + {file = "shiboken6-6.6.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:fb102e4bc210006f0cdd0ce38e1aaaaf792bd871f02a2b3f01d07922c5cf4c59"}, + {file = "shiboken6-6.6.1-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:a605960e72af5eef915991cee7eef4cc72f5cabe63b9ae1a955ceb3d3b0a00b9"}, + {file = "shiboken6-6.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:072c35c4fe46ec13b364d9dc47b055bb2277ee3aeaab18c23650280ec362f62a"}, ] [package.source] @@ -525,13 +481,13 @@ reference = "tsinghua_mirror" [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.9.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [package.source] @@ -541,19 +497,19 @@ reference = "tsinghua_mirror" [[package]] name = "virtualenv" -version = "20.24.6" +version = "20.25.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, - {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, ] [package.dependencies] distlib = ">=0.3.7,<1" filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<4" +platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] @@ -566,5 +522,5 @@ reference = "tsinghua_mirror" [metadata] lock-version = "2.0" -python-versions = ">=3.9,<3.12" -content-hash = "f0935cd97597e29fa2a4be1db5b3fe0ae0c1851311556dc48627ddf5460c3875" +python-versions = ">=3.9,<3.13" +content-hash = "9a69db5a92317df6c62461f504fea9c49c52182ac8863256e91bfdbc9c17ccb9" diff --git a/pyproject.toml b/pyproject.toml index eb392fd..154b49a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,14 +16,14 @@ url = "https://pypi.tuna.tsinghua.edu.cn/simple" priority = "default" [tool.poetry.dependencies] -python = ">=3.9,<3.12" -pyside6 = "^6.6.0" +python = ">=3.9,<3.13" +pyside6-essentials = "^6.2.0" [tool.poetry.group.dev.dependencies] -black = "^23.11.0" -isort = "^5.12.0" -mypy = "^1.7.0" -pre-commit = "^3.5.0" +black = "^24.1.0" +isort = "^5.13.0" +mypy = "^1.8.0" +pre-commit = "^3.6.0" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt index 1768a8b..52d53dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,4 @@ --index-url https://pypi.tuna.tsinghua.edu.cn/simple -pyside6-addons==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -pyside6-essentials==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -pyside6==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -shiboken6==6.4.2 ; python_version >= "3.9" and python_version < "3.12" +pyside6-essentials >= 6.2.0 ; python_version >= "3.9" and python_version < "3.13" +shiboken6 >= 6.2.0 ; python_version >= "3.9" and python_version < "3.13" diff --git a/requirements_dev.txt b/requirements_dev.txt deleted file mode 100644 index 2a3562a..0000000 --- a/requirements_dev.txt +++ /dev/null @@ -1,17 +0,0 @@ ---index-url https://pypi.tuna.tsinghua.edu.cn/simple - -black==23.1.0 ; python_version >= "3.9" and python_version < "3.12" -click==8.1.3 ; python_version >= "3.9" and python_version < "3.12" -colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.12" and platform_system == "Windows" -isort==5.12.0 ; python_version >= "3.9" and python_version < "3.12" -mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "3.12" -mypy==1.1.1 ; python_version >= "3.9" and python_version < "3.12" -packaging==23.0 ; python_version >= "3.9" and python_version < "3.12" -pathspec==0.11.1 ; python_version >= "3.9" and python_version < "3.12" -platformdirs==3.1.1 ; python_version >= "3.9" and python_version < "3.12" -pyside6-addons==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -pyside6-essentials==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -pyside6==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -shiboken6==6.4.2 ; python_version >= "3.9" and python_version < "3.12" -tomli==2.0.1 ; python_version >= "3.9" and python_version < "3.11" -typing-extensions==4.5.0 ; python_version >= "3.9" and python_version < "3.12" From a7460cbdb111dafd0d3776357d7b0379056bebdc Mon Sep 17 00:00:00 2001 From: sltlala Date: Wed, 24 Jan 2024 00:50:09 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E4=BF=AE=E6=AD=A3state=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8CQt.Checked.value=E6=89=8D=E6=98=AFin?= =?UTF-8?q?t=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../03-QCheckBox-\344\277\241\345\217\267.py" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/02-Button-\346\214\211\351\222\256\346\216\247\344\273\266/04-QCheckBox-\345\244\215\351\200\211\346\241\206/03-QCheckBox-\344\277\241\345\217\267.py" "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/02-Button-\346\214\211\351\222\256\346\216\247\344\273\266/04-QCheckBox-\345\244\215\351\200\211\346\241\206/03-QCheckBox-\344\277\241\345\217\267.py" index 3b3e01a..eefe0d3 100644 --- "a/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/02-Button-\346\214\211\351\222\256\346\216\247\344\273\266/04-QCheckBox-\345\244\215\351\200\211\346\241\206/03-QCheckBox-\344\277\241\345\217\267.py" +++ "b/03-QtWidgets-\345\270\270\347\224\250\346\216\247\344\273\266/02-Button-\346\214\211\351\222\256\346\216\247\344\273\266/04-QCheckBox-\345\244\215\351\200\211\346\241\206/03-QCheckBox-\344\277\241\345\217\267.py" @@ -30,11 +30,11 @@ def test_01(self) -> None: @QtCore.Slot(int) def test_slot(state: int) -> None: - if state == Qt.Checked: + if state == Qt.Checked.value: print("复选框被选中了!") - elif state == Qt.Unchecked: + elif state == Qt.Unchecked.value: print("复选框被取消选中了!") - elif state == Qt.PartiallyChecked: + elif state == Qt.PartiallyChecked.value: print("复选框被部分选中!") self.cb.stateChanged.connect(test_slot) # type: ignore From 44b8421bc0eea164ef43d162d89e83a9545387e4 Mon Sep 17 00:00:00 2001 From: muzing Date: Sat, 3 Feb 2024 23:31:51 +0800 Subject: [PATCH 12/13] Update README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新自述文件; 添加 `CONTRIBUTING.md` --- .github/CONTRIBUTING.md | 36 ++++++++++++++++++++++++++++++++++++ README.md | 28 ++++++++++++++-------------- 2 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 .github/CONTRIBUTING.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..6dddafe --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# 贡献指南 + +非常感谢你愿意为 PySide6-Code-Tutorial 项目提供贡献,请阅读以下内容,遵守一些基本规则,以便项目保持良好状态快速发展。 + +## 开始编码之前 + +如果你准备对代码进行超过数十行的修改或新增,我强烈建议你先提交一个 issue,谈谈你想实现的东西。在投入很多精力之前,我们应该先讨论一下是否要这样做,也可以确保我们不重复工作。 + +## 编写代码 + +### 准备开发环境 + +开发环境相较于使用环境较为复杂,确保已经安装 Python 3.11+ 和 [Poetry](https://python-poetry.org/docs/#installation),然后通过 Poetry 创建和安装开发环境: + +```shell +cd PySide6-Code-Tutorial +poetry init +poetry install +``` + +还需要通过 [pre-commit](https://pre-commit.com/) 安装 git 钩子: + +```shell +pre-commit install +``` + +### 代码风格 + +- 总体来讲,新增和修改的代码应接近原有代码的风格。尽量使代码有良好的可读性。 +- 请使用 [Black](https://black.readthedocs.io/en/stable/) 格式化代码,确保所有代码风格与项目一致。开发环境中已经安装了 Black,配置使用方法可以参考[这篇文章](https://muzing.top/posts/a29e4743/)。 +- 请为代码添加充分的[类型注解](https://muzing.top/posts/84a8da1c/),并能通过 [mypy](https://mypy.readthedocs.io/en/stable/) 检查不报错。 +- 请为模块、类、函数/方法、属性等添加 docstring 或注释,确保含义清晰易读。 + +## 拉取请求 + +新建一个指向 [muziing/PySide6-Code-Tutorial](https://github.com/muziing/PySide6-Code-Tutorial) 的 `main` 分支的拉取请求,我将尽快 review 代码并给出反馈。 diff --git a/README.md b/README.md index a6b6e92..f3d683b 100644 --- a/README.md +++ b/README.md @@ -42,17 +42,7 @@ ### 二、配置虚拟环境与安装依赖 -**方式 A** :[Poetry](https://python-poetry.org/)(推荐) - -1. 确保 Python 版本与 [pyproject.toml](./pyproject.toml) 中要求的一致 -2. 按[官方文档](https://python-poetry.org/docs/#installation)提示安装 Poetry -3. 创建虚拟环境:`poetry env use /full/path/to/python`(注意替换路径) -4. 安装依赖:`poetry install --no-root --only main` -5. 使用该虚拟环境: `poetry shell`(或在 PyCharm 等 IDE 中配置) - -> 更多 Poetry 使用方法信息,请参阅其[官方文档](https://python-poetry.org/docs/)。 - -**方式 B** :[venv](https://docs.python.org/zh-cn/3/library/venv.html)(简单易用) +**方式 A** :[venv](https://docs.python.org/zh-cn/3/library/venv.html)(简单易用,推荐) 1. 确保 Python 版本与 [pyproject.toml](./pyproject.toml) 中要求的一致 2. 创建虚拟环境 @@ -63,6 +53,16 @@ - Linux/macOS: `. venv/bin/activate` 4. 安装依赖:`pip install -r requirements.txt` +**方式 B** :[Poetry](https://python-poetry.org/) + +1. 确保 Python 版本与 [pyproject.toml](./pyproject.toml) 中要求的一致 +2. 按[官方文档](https://python-poetry.org/docs/#installation)提示安装 Poetry +3. 创建虚拟环境:`poetry env use /full/path/to/python`(注意替换路径) +4. 安装依赖:`poetry install --no-root --only main` +5. 使用该虚拟环境: `poetry shell`(或在 PyCharm 等 IDE 中配置) + +> 更多 Poetry 使用方法信息,请参阅其[官方文档](https://python-poetry.org/docs/)。 + **方式 C** :其他包管理工具 1. 使用你喜欢的其他工具创建虚拟环境,如 [Pipenv](https://pipenv.pypa.io/)、[Conda](https://www.anaconda.com/) 等 @@ -86,7 +86,7 @@ | [01. HelloWorld - PySide 基本结构](./01-HelloWorld-基本结构) | 新手上路,PySide6 程序的基本结构 | | [02. QtCore - 非GUI的核心功能](./02-QtCore-非GUI的核心功能) | 元对象系统、「信号与槽」通信机制等 | | [03. QtWidgets - 常用控件](./03-QtWidgets-常用控件) | 按钮、输入框、文本编辑器、下拉菜单、滚动条等等常用控件的功能、用法 | -| [04. QtGui - 使用GUI功能扩展QtCore](./04-QtGui-使用GUI功能扩展QtCore) | 位图、字体、颜色、键盘快捷键等、事件 | +| [04. QtGui - 使用GUI功能扩展QtCore](./04-QtGui-使用GUI功能扩展QtCore) | 位图、字体、颜色、键盘快捷键等、事件(暂未完成) | | [05. QtWidgets - 进阶话题](./05-QtWidgets-进阶话题) | 布局管理器、QSS样式、主窗口控件等 | | [06. Model/View - 模型与视图、数据库](./06-ModelView-模型与视图、数据库) | 模型与视图、与数据库交互 | | [07. Packaging - 静态资源编译、打包](./07-Packaging-资源管理与打包) | 将应用程序打包为 `exe`、将静态资源编译至二进制 `qrc` 文件 | @@ -139,6 +139,6 @@ PySide6 Code Tutorial 是一个开源项目,非常期待以及感谢你的参 ## 打赏 -本项目的[主要作者/维护者](https://muzing.top/about/)是一名还没有收入的在校学生,如果本项目对你有帮助,希望可以请他喝一杯冰可乐 :beer:。 +如果本项目对你有帮助,可以请[主要作者/维护者](https://muzing.top/about/)喝一杯冰可乐 :beer:。 -![微信收款码](./Resources/Images/muzing-WeChat-Collection.png) +![微信赞赏码](./Resources/Images/muzing-WeChat-Collection.png) From 1faa029b1fe9c082d4ae7447a2e47d1e0e0815de Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 00:12:29 +0000 Subject: [PATCH 13/13] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 24.1.1 → 24.2.0](https://github.com/psf/black/compare/24.1.1...24.2.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3f5b689..41549df 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,7 +10,7 @@ repos: - id: end-of-file-fixer - repo: https://github.com/psf/black - rev: 24.1.1 + rev: 24.2.0 hooks: - id: black args: [--config, "./pyproject.toml"]