├── .nojekyll ├── docs ├── 105.md ├── 112.md ├── 18.md ├── 2.md ├── 41.md ├── 47.md ├── 71.md ├── 80.md ├── 89-0.md ├── 91.md ├── 95.md ├── 98.md ├── 65.md ├── img │ ├── 00af7aae4e992d7feccf73ba2c75cb8f.jpg │ ├── 02ad7ee98094c1504dca8004682214e4.jpg │ ├── 03294f86324be9f10d0065240bd181ff.jpg │ ├── 060aff2419f3f914c11c28c7e8aad94d.jpg │ ├── 060d78bee47f73f41d63d11356e21d3b.jpg │ ├── 08595a6340da7b1792993a5bb8fb5912.jpg │ ├── 08bb4546f3444dd75f3a9fd52f0a3b34.jpg │ ├── 0d6947136c1415343a3b5c08c5e2a92a.jpg │ ├── 0e5e1650a644a2fdcbb8890c2461f664.jpg │ ├── 101486ce1bbc9d508a1b9a71f7b85f5b.jpg │ ├── 1629a04730237a4379bd58ced163e08f.jpg │ ├── 18212430a11e21ca680a2bbd5ca295f1.jpg │ ├── 18374e2fa266165025a38238c3cdc35f.jpg │ ├── 185c656e13f47debbad67f5133a4215d.jpg │ ├── 19e10ff770d93deeffd983bf09f95bdc.jpg │ ├── 1ba4734564ba9e9d29a42d7b859ca981.jpg │ ├── 1c9f3ba2c9aff9589eaa99e46af4ce6a.jpg │ ├── 1d17f5d6e0c394ba2f1d574baf74c7b0.jpg │ ├── 203364d9fef45dfbe203c636f81c6a09.jpg │ ├── 20a813e45236ffc17c7e9ca8670e3960.jpg │ ├── 21216682f087b65cf13cc14fe0839117.jpg │ ├── 224bd2a6a881437fdda6c2509430673e.jpg │ ├── 23cf03d0a6badbf9bead1760c2dc3aad.jpg │ ├── 26f8399bf1c15d18bf11bd65253f1c25.jpg │ ├── 287d5ac2bd36de412e26bc9ed4a3f4c9.jpg │ ├── 289712f8426bbfc6ceacdd22bbcff819.jpg │ ├── 2a47be594c5c80724c14a822dd96b251.jpg │ ├── 2b32675c9f6d4fd2f2bb157ad1dbb461.jpg │ ├── 2b327b721889fb95be65443c1d531d0f.jpg │ ├── 2c012acbbf068f97276301d4bf125959.jpg │ ├── 2c7923eec25e9f598b1f2667df933487.jpg │ ├── 2e9237024699bc650a584770b2742961.jpg │ ├── 2e956313eabdc7e6c4862b6d8512e5be.jpg │ ├── 2f129027ae983205309e3979ced402ab.jpg │ ├── 31c98fde0479cf20245c15c9388cc434.jpg │ ├── 35ae64518583e605bb57af58666ccecd.jpg │ ├── 37a3257ed2c7f13f0b141e9c9aa72d3e.jpg │ ├── 38adcfbb184729e5d1d74b09ba622436.jpg │ ├── 3911a344ee61b701979eb5a2de2c4e27.jpg │ ├── 39b6c36ab8e572851d1e54b469fe6c7d.jpg │ ├── 3d85797cd44b2c4b3348bfd4fc8a7795.jpg │ ├── 41e5801abd44884a07aa898717a7e69e.jpg │ ├── 41f0697b9c4ebb9f885ccb0b62b70abc.jpg │ ├── 42005bdb1e24d6b5c1b14e5895521e3a.jpg │ ├── 42212723a1a77a8a66fecd11fd3d5165.jpg │ ├── 461628f4ea72f485b16a902f65db838a.jpg │ ├── 472f18a048e7f08feb788266c341bfd8.jpg │ ├── 4759d47def6e28610123bd8cc0a9a6bf.jpg │ ├── 4771c932e36a9c118f5967ffccc36b4e.jpg │ ├── 48b89f4abcd4c9c1aa2472cd3bc509c1.jpg │ ├── 4915adfc6d1a53dddb74cfc74d45644b.jpg │ ├── 4c1c799e1aa4d7f3a9c4b9104ff0efe2.jpg │ ├── 4c7e8cbef62872a3c49fc4085527514d.jpg │ ├── 4d9da0a2b8e81110fd8f9c625e578502.jpg │ ├── 4feca70727af7a6746c9d69566f08f53.jpg │ ├── 4ff0874e193357fd06d6aca13d7dc8c4.jpg │ ├── 504bef57162c863b6a965fac9be10377.jpg │ ├── 538e4461fb4b4cc380ce7b29759028f8.jpg │ ├── 53e4614735001004cf10a5404203ea71.jpg │ ├── 54280984e9f8f3b22316893807c1a52e.jpg │ ├── 56afbfa748895a916cb9a83cb407e791.jpg │ ├── 596080c3f68a2e0f8ba4ca54f064272d.jpg │ ├── 5a539b08d07773dbba46f659b5d1743c.jpg │ ├── 5a58343f3bd5e027d97e90721b1c4a53.jpg │ ├── 5c9510eede5c19eda3992c95d2bcb565.jpg │ ├── 5e6dbbe03affb0bf5a05415f48a771ad.jpg │ ├── 5fc5f2d4ce90f29c2e50b128607f8bd3.jpg │ ├── 60354a5e7e39d04c97a1ee14b3b5db1b.jpg │ ├── 6094d3e9eaea24f4f064dfcd2ea91ddc.jpg │ ├── 6331a77064535de9dc0a93e8b103f00d.jpg │ ├── 63f4d90dfe1598c08abff7ee025b9a0b.jpg │ ├── 671697da89293504fef04cfadad29c6b.jpg │ ├── 67a209e3d95dcfc3bcf10be8ee22a065.jpg │ ├── 6872d4e6f12488af0c0f4f9c14deb773.jpg │ ├── 6ac783bbfde215c4acea8b0c79576f88.jpg │ ├── 6adc3a15f96ef6e3c0d50782fc63af32.jpg │ ├── 6efbaae64acdb4e69214c7589963b5bd.jpg │ ├── 6f6aa6594bc5ce80d77b48a2abe7c75e.jpg │ ├── 70a9514350dec1b5880953cebd0fae0a.jpg │ ├── 71481f97c660d6556a1bf3c5b70648bc.jpg │ ├── 72b521dd094d336233ce321ce73811a2.jpg │ ├── 744304fa9c5a5b805fd3179eb9881d70.jpg │ ├── 74c0efc42f7bf310489f953f2b5cbd0e.jpg │ ├── 77d7b4598127e8b587d29da009865dde.jpg │ ├── 7874a6d1f9758b18ee1ef3d3e4f58334.jpg │ ├── 7c8aa302666166e4fa6969572c501f04.jpg │ ├── 7ebef81ff83b49c4f531247f8fb26cc7.jpg │ ├── 823633047587a7e6edb407963de58da0.jpg │ ├── 82f73ddadae94db3c7fa209585564d41.jpg │ ├── 843b3c0a68065ac101f04944c2bac053.jpg │ ├── 883cefe5eed8bb91f8afda3e8466c83b.jpg │ ├── 8a804a5303e6f2a4f62d47582241129b.jpg │ ├── 8e1ee291a6d4a348a3629298a80fefbd.jpg │ ├── 9036abd8c344a4a541cfb80139d9e0d3.jpg │ ├── 9146e41d31ff53b16fd2fbb13d3f823e.jpg │ ├── 91f2efcb7aedc6b7c1fb02870373fc54.jpg │ ├── 941e20c7d0c048025948f404e3fb4668.jpg │ ├── 966f97e15792c89ebeb6f5f8942b0ee5.jpg │ ├── 97cad8fbf9745375f3af2d417ebcad07.jpg │ ├── 9bd0f09416c906b80796a1f54cff8df4.jpg │ ├── 9c5ebd78eb1d6f93cea18eb55b708e26.jpg │ ├── 9faa714fe3700fc2441dae01484b73c3.jpg │ ├── a020c75900e58cd1f603f8e5e68bcd58.jpg │ ├── a08ca500d9d2d3de81de36faa715c9a4.jpg │ ├── a2027e0feffd6a4445ba2e70bafd7e01.jpg │ ├── a24879ba48cc2b7501b7b33c35f7dc27.jpg │ ├── a27d316530f4f9a8d71898076641b9ef.jpg │ ├── a49e87363988856b8eabf42c30cf9400.jpg │ ├── a60b759f387958b2b4c7046ecd6f4b87.jpg │ ├── a6f06b37951c44452f79efd047298429.jpg │ ├── a783141f02a6302a2f1e80908156dc5d.jpg │ ├── a9c26e973da367c3f6e0289252c0c55a.jpg │ ├── ab786df4859e36d6feeabac1f97dc5f2.jpg │ ├── af9cd039b8bc48207cfd140b3bd3dd1c.jpg │ ├── b096b6df86baa4af3f1d9b86a8b57af2.jpg │ ├── b183ab9d09b4460a2626a0004e1f1b00.jpg │ ├── b18a764c1fce5b869fc970d63229d0d9.jpg │ ├── b1cecef71e11f781248c0be0b90beddd.jpg │ ├── b1fb57a653c6741ced779c294ca87447.jpg │ ├── b2c2549d84491412df87f80cf61fbbdc.jpg │ ├── b49bf74e6651a4fea2a00aefd48f3b71.jpg │ ├── b4dc9a1dbd2f3dbfa9b8223a63b62c12.jpg │ ├── b572dd0f882ff709fb5896b3f7c9905f.jpg │ ├── b59cd2b0d0a998425f408fe5543c9e37.jpg │ ├── b726bf5bcea4b7fc5dd8a2908ec4d963.jpg │ ├── b76892fe0218d67c9bf34e469d9dc0a4.jpg │ ├── b7a7593691fc70c549881f1570ecc3b1.jpg │ ├── b968cc0aef66f5044316ef16f602586b.jpg │ ├── bbadfcdfb92f4eda0d40720b8d0e771e.jpg │ ├── bd56787dddab1c008d47ba1c7a8024c6.jpg │ ├── bdac172cb293a59affa870d6d1998358.jpg │ ├── be30d3c5aa2158a9864d173116eb6291.jpg │ ├── be653e10825576897782b24bebe362dd.jpg │ ├── c001705e2cbb8d9befa1f91127a880e3.jpg │ ├── c145c7271f700e11aa378a211bb94dff.jpg │ ├── c270198655afac039b29c13193a5885a.jpg │ ├── c2a6a40115692ff004dc8fce43168e64.jpg │ ├── c42c47fbf14b6aaa7f986d9a92760b12.jpg │ ├── c5c710d4eea36d37879737f96ff29bc9.jpg │ ├── c5f854a140b5ba105f0ef20d4ef12150.jpg │ ├── ca67319c33ab1709f8fd3eafa79c6dfb.jpg │ ├── cada3d59a1bd4887694d8ded4576f519.jpg │ ├── cb722e238db4c81d1854b65097d597a9.jpg │ ├── cb9724ae989ef2c079731874772a1798.jpg │ ├── cf4c779d69c693df5e8c1e309437d6ef.jpg │ ├── d08118dfea2a3c65bb9fb3442f0f1ead.jpg │ ├── d307bb30c80bcdc37eb773b73a87a095.jpg │ ├── d7d2af89a8c3b111fe7af988097bbb40.jpg │ ├── da268e0c364d3bc6fcbf891258c7d557.jpg │ ├── deb55c16c07fa22d5f0e10f36f49e448.jpg │ ├── deee1c79e1cf5a6bd033391e65334fe7.jpg │ ├── df86fab3b666cb94ac00348b799147b2.jpg │ ├── dfd62755502ca81aebecea9632e215b4.jpg │ ├── dfeb48b2ab36e759c1a0397c54d6b925.jpg │ ├── e03df8ccfe07cbd4e2c14160804b959b.jpg │ ├── e182cb14d2bc6ad50a2c3a4c7b527cb4.jpg │ ├── e1a3038b12827bae5b81fcd02191e14a.jpg │ ├── e1cf4ef1a7f5301ee63ded4806461cb2.jpg │ ├── e1ecb442d3cf63667cc8d8f265ea6fb7.jpg │ ├── e1fe0af3cb6c0d5c97380258734cdce9.jpg │ ├── e22af26e044860eabf29f3813b1dfa8b.jpg │ ├── e4b79ccb91cef551723600488e9cb81b.jpg │ ├── e4dfab9c6e230bb2f91a6b0715c548d7.jpg │ ├── e57ee6ed25a87b23c3a3cfe92e1fa1fe.jpg │ ├── e58b77134f9f1ef5de60f6715f4181ef.jpg │ ├── e60f6a76e7fe2549ced2f64702af8620.jpg │ ├── e6109601b6daf8134d2007b85d72e77a.jpg │ ├── e67c0c741c049ebf8163523792e9e8d0.jpg │ ├── e700a43a387c917fef1acdb35ac275a0.jpg │ ├── e9d03180e4231af35183a0c4f9ff6277.jpg │ ├── eabd6215fba57ca6e4a5ab91823da3c2.jpg │ ├── eb28ce9a1b0629a41bede0d2fb88d1a2.jpg │ ├── ec69b97f82c9ef2d0bac39c941f21ed9.jpg │ ├── f10feda9b4de908651d49d99ae3924e4.jpg │ ├── f177725bc03d4c71b4a00e1334990e57.jpg │ ├── f1f56d1db3e8574fad782a6392cbb56c.jpg │ ├── f713e77b9a67592c539974f0fd3c7bbe.jpg │ ├── f7ac284ac78f49d58761139b6641f9fb.jpg │ ├── f8756b4a6882e933bfd6fc3f8f1fe1b6.jpg │ ├── f8cf080d83de7cdd12b501d273967d21.jpg │ ├── f9a64d9604d279e122057d7ac9086909.jpg │ ├── fac89ca5c417cab74c1eae70c7d3c4b4.jpg │ ├── fb0c1e80aa99b4e5cdf8e4159b31d784.jpg │ ├── fc1e1a56cd0872dc8e3ed3e671b21bfb.jpg │ ├── fcfe05a322371b16b27393f14b96f8b2.jpg │ ├── fd7b94854e84159bef1cf070eb492474.jpg │ ├── ff4ca6bf3d6ff81f610c0b9de5338c3f.jpg │ └── ffcf168eb33ec6fc29c5af6ac197b5ef.jpg ├── 70.md ├── 5.md ├── 86.md ├── 36.md ├── 9.md ├── 22.md ├── 14.md ├── 16.md ├── 4.md ├── 66.md ├── 223.md ├── 49.md ├── 24.md ├── 3.md ├── 100.md ├── 106.md ├── 237.md ├── 93.md ├── 233.md ├── 28.md ├── 67.md ├── 12.md ├── 38.md ├── 37.md ├── 8.md ├── 20.md ├── 6.md ├── 217.md ├── 224.md ├── 87.md ├── 13.md ├── 57.md ├── 10.md ├── 88.md ├── 236.md ├── 84.md ├── 27.md ├── 97.md ├── 235.md ├── 69.md ├── 214.md ├── 31.md ├── 229.md ├── 202.md ├── 11.md ├── 33.md ├── 7.md ├── 220.md ├── 230.md ├── 219.md ├── 78.md ├── 25.md ├── 74.md ├── 35.md ├── 221.md ├── 82.md ├── 213.md ├── 222.md ├── 15.md ├── 40.md ├── 63.md ├── 30.md ├── 17.md ├── 50.md ├── 228.md ├── 32.md ├── 62.md ├── 79.md ├── 99.md ├── 215.md ├── 232.md ├── 94.md ├── 76.md ├── 234.md ├── 19.md ├── 205.md ├── 58.md ├── 216.md ├── 68.md ├── 203.md ├── 34.md ├── 102.md └── 113.md ├── CNAME ├── Dockerfile ├── update.sh ├── 404.html ├── asset ├── moon.svg ├── share.css ├── edit.css ├── sidebar.min.css ├── docsify-baidu-push.js ├── edit.js ├── back-to-top.css ├── docsify-cnzz.js ├── docsify-baidu-stat.js ├── dark-mode.css ├── sun.svg ├── back-to-top.js ├── right.svg ├── up.svg ├── left.svg ├── docsify-quick-page.css ├── edit.svg ├── dark-mode.js ├── docsify-quick-page.js ├── share.svg ├── prism-python.min.js ├── docsify-apachecn-footer.js └── style.css ├── README.md └── .gitignore /.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/105.md: -------------------------------------------------------------------------------- 1 | # 游戏 -------------------------------------------------------------------------------- /docs/112.md: -------------------------------------------------------------------------------- 1 | # 机器人技术 -------------------------------------------------------------------------------- /docs/18.md: -------------------------------------------------------------------------------- 1 | # 数据和数据库 -------------------------------------------------------------------------------- /docs/2.md: -------------------------------------------------------------------------------- 1 | # 初学者 -------------------------------------------------------------------------------- /docs/41.md: -------------------------------------------------------------------------------- 1 | # 数据与数据库 -------------------------------------------------------------------------------- /docs/47.md: -------------------------------------------------------------------------------- 1 | # Web -------------------------------------------------------------------------------- /docs/71.md: -------------------------------------------------------------------------------- 1 | # 网络 -------------------------------------------------------------------------------- /docs/80.md: -------------------------------------------------------------------------------- 1 | # 绘图 -------------------------------------------------------------------------------- /docs/89-0.md: -------------------------------------------------------------------------------- 1 | # 高级 -------------------------------------------------------------------------------- /docs/91.md: -------------------------------------------------------------------------------- 1 | # 其他 -------------------------------------------------------------------------------- /docs/95.md: -------------------------------------------------------------------------------- 1 | # 安卓系统 -------------------------------------------------------------------------------- /docs/98.md: -------------------------------------------------------------------------------- 1 | # 计算机视觉 -------------------------------------------------------------------------------- /docs/65.md: -------------------------------------------------------------------------------- 1 | # GUI(图形界面) -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | pysp.apachecn.org 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM httpd:2.4 2 | COPY ./ /usr/local/apache2/htdocs/ -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | git add -A 2 | git commit -am "$(date "+%Y-%m-%d %H:%M:%S")" 3 | git push -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /docs/img/00af7aae4e992d7feccf73ba2c75cb8f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/00af7aae4e992d7feccf73ba2c75cb8f.jpg -------------------------------------------------------------------------------- /docs/img/02ad7ee98094c1504dca8004682214e4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/02ad7ee98094c1504dca8004682214e4.jpg -------------------------------------------------------------------------------- /docs/img/03294f86324be9f10d0065240bd181ff.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/03294f86324be9f10d0065240bd181ff.jpg -------------------------------------------------------------------------------- /docs/img/060aff2419f3f914c11c28c7e8aad94d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/060aff2419f3f914c11c28c7e8aad94d.jpg -------------------------------------------------------------------------------- /docs/img/060d78bee47f73f41d63d11356e21d3b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/060d78bee47f73f41d63d11356e21d3b.jpg -------------------------------------------------------------------------------- /docs/img/08595a6340da7b1792993a5bb8fb5912.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/08595a6340da7b1792993a5bb8fb5912.jpg -------------------------------------------------------------------------------- /docs/img/08bb4546f3444dd75f3a9fd52f0a3b34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/08bb4546f3444dd75f3a9fd52f0a3b34.jpg -------------------------------------------------------------------------------- /docs/img/0d6947136c1415343a3b5c08c5e2a92a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/0d6947136c1415343a3b5c08c5e2a92a.jpg -------------------------------------------------------------------------------- /docs/img/0e5e1650a644a2fdcbb8890c2461f664.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/0e5e1650a644a2fdcbb8890c2461f664.jpg -------------------------------------------------------------------------------- /docs/img/101486ce1bbc9d508a1b9a71f7b85f5b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/101486ce1bbc9d508a1b9a71f7b85f5b.jpg -------------------------------------------------------------------------------- /docs/img/1629a04730237a4379bd58ced163e08f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/1629a04730237a4379bd58ced163e08f.jpg -------------------------------------------------------------------------------- /docs/img/18212430a11e21ca680a2bbd5ca295f1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/18212430a11e21ca680a2bbd5ca295f1.jpg -------------------------------------------------------------------------------- /docs/img/18374e2fa266165025a38238c3cdc35f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/18374e2fa266165025a38238c3cdc35f.jpg -------------------------------------------------------------------------------- /docs/img/185c656e13f47debbad67f5133a4215d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/185c656e13f47debbad67f5133a4215d.jpg -------------------------------------------------------------------------------- /docs/img/19e10ff770d93deeffd983bf09f95bdc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/19e10ff770d93deeffd983bf09f95bdc.jpg -------------------------------------------------------------------------------- /docs/img/1ba4734564ba9e9d29a42d7b859ca981.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/1ba4734564ba9e9d29a42d7b859ca981.jpg -------------------------------------------------------------------------------- /docs/img/1c9f3ba2c9aff9589eaa99e46af4ce6a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/1c9f3ba2c9aff9589eaa99e46af4ce6a.jpg -------------------------------------------------------------------------------- /docs/img/1d17f5d6e0c394ba2f1d574baf74c7b0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/1d17f5d6e0c394ba2f1d574baf74c7b0.jpg -------------------------------------------------------------------------------- /docs/img/203364d9fef45dfbe203c636f81c6a09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/203364d9fef45dfbe203c636f81c6a09.jpg -------------------------------------------------------------------------------- /docs/img/20a813e45236ffc17c7e9ca8670e3960.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/20a813e45236ffc17c7e9ca8670e3960.jpg -------------------------------------------------------------------------------- /docs/img/21216682f087b65cf13cc14fe0839117.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/21216682f087b65cf13cc14fe0839117.jpg -------------------------------------------------------------------------------- /docs/img/224bd2a6a881437fdda6c2509430673e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/224bd2a6a881437fdda6c2509430673e.jpg -------------------------------------------------------------------------------- /docs/img/23cf03d0a6badbf9bead1760c2dc3aad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/23cf03d0a6badbf9bead1760c2dc3aad.jpg -------------------------------------------------------------------------------- /docs/img/26f8399bf1c15d18bf11bd65253f1c25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/26f8399bf1c15d18bf11bd65253f1c25.jpg -------------------------------------------------------------------------------- /docs/img/287d5ac2bd36de412e26bc9ed4a3f4c9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/287d5ac2bd36de412e26bc9ed4a3f4c9.jpg -------------------------------------------------------------------------------- /docs/img/289712f8426bbfc6ceacdd22bbcff819.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/289712f8426bbfc6ceacdd22bbcff819.jpg -------------------------------------------------------------------------------- /docs/img/2a47be594c5c80724c14a822dd96b251.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2a47be594c5c80724c14a822dd96b251.jpg -------------------------------------------------------------------------------- /docs/img/2b32675c9f6d4fd2f2bb157ad1dbb461.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2b32675c9f6d4fd2f2bb157ad1dbb461.jpg -------------------------------------------------------------------------------- /docs/img/2b327b721889fb95be65443c1d531d0f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2b327b721889fb95be65443c1d531d0f.jpg -------------------------------------------------------------------------------- /docs/img/2c012acbbf068f97276301d4bf125959.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2c012acbbf068f97276301d4bf125959.jpg -------------------------------------------------------------------------------- /docs/img/2c7923eec25e9f598b1f2667df933487.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2c7923eec25e9f598b1f2667df933487.jpg -------------------------------------------------------------------------------- /docs/img/2e9237024699bc650a584770b2742961.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2e9237024699bc650a584770b2742961.jpg -------------------------------------------------------------------------------- /docs/img/2e956313eabdc7e6c4862b6d8512e5be.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2e956313eabdc7e6c4862b6d8512e5be.jpg -------------------------------------------------------------------------------- /docs/img/2f129027ae983205309e3979ced402ab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/2f129027ae983205309e3979ced402ab.jpg -------------------------------------------------------------------------------- /docs/img/31c98fde0479cf20245c15c9388cc434.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/31c98fde0479cf20245c15c9388cc434.jpg -------------------------------------------------------------------------------- /docs/img/35ae64518583e605bb57af58666ccecd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/35ae64518583e605bb57af58666ccecd.jpg -------------------------------------------------------------------------------- /docs/img/37a3257ed2c7f13f0b141e9c9aa72d3e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/37a3257ed2c7f13f0b141e9c9aa72d3e.jpg -------------------------------------------------------------------------------- /docs/img/38adcfbb184729e5d1d74b09ba622436.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/38adcfbb184729e5d1d74b09ba622436.jpg -------------------------------------------------------------------------------- /docs/img/3911a344ee61b701979eb5a2de2c4e27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/3911a344ee61b701979eb5a2de2c4e27.jpg -------------------------------------------------------------------------------- /docs/img/39b6c36ab8e572851d1e54b469fe6c7d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/39b6c36ab8e572851d1e54b469fe6c7d.jpg -------------------------------------------------------------------------------- /docs/img/3d85797cd44b2c4b3348bfd4fc8a7795.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/3d85797cd44b2c4b3348bfd4fc8a7795.jpg -------------------------------------------------------------------------------- /docs/img/41e5801abd44884a07aa898717a7e69e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/41e5801abd44884a07aa898717a7e69e.jpg -------------------------------------------------------------------------------- /docs/img/41f0697b9c4ebb9f885ccb0b62b70abc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/41f0697b9c4ebb9f885ccb0b62b70abc.jpg -------------------------------------------------------------------------------- /docs/img/42005bdb1e24d6b5c1b14e5895521e3a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/42005bdb1e24d6b5c1b14e5895521e3a.jpg -------------------------------------------------------------------------------- /docs/img/42212723a1a77a8a66fecd11fd3d5165.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/42212723a1a77a8a66fecd11fd3d5165.jpg -------------------------------------------------------------------------------- /docs/img/461628f4ea72f485b16a902f65db838a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/461628f4ea72f485b16a902f65db838a.jpg -------------------------------------------------------------------------------- /docs/img/472f18a048e7f08feb788266c341bfd8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/472f18a048e7f08feb788266c341bfd8.jpg -------------------------------------------------------------------------------- /docs/img/4759d47def6e28610123bd8cc0a9a6bf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4759d47def6e28610123bd8cc0a9a6bf.jpg -------------------------------------------------------------------------------- /docs/img/4771c932e36a9c118f5967ffccc36b4e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4771c932e36a9c118f5967ffccc36b4e.jpg -------------------------------------------------------------------------------- /docs/img/48b89f4abcd4c9c1aa2472cd3bc509c1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/48b89f4abcd4c9c1aa2472cd3bc509c1.jpg -------------------------------------------------------------------------------- /docs/img/4915adfc6d1a53dddb74cfc74d45644b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4915adfc6d1a53dddb74cfc74d45644b.jpg -------------------------------------------------------------------------------- /docs/img/4c1c799e1aa4d7f3a9c4b9104ff0efe2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4c1c799e1aa4d7f3a9c4b9104ff0efe2.jpg -------------------------------------------------------------------------------- /docs/img/4c7e8cbef62872a3c49fc4085527514d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4c7e8cbef62872a3c49fc4085527514d.jpg -------------------------------------------------------------------------------- /docs/img/4d9da0a2b8e81110fd8f9c625e578502.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4d9da0a2b8e81110fd8f9c625e578502.jpg -------------------------------------------------------------------------------- /docs/img/4feca70727af7a6746c9d69566f08f53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4feca70727af7a6746c9d69566f08f53.jpg -------------------------------------------------------------------------------- /docs/img/4ff0874e193357fd06d6aca13d7dc8c4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/4ff0874e193357fd06d6aca13d7dc8c4.jpg -------------------------------------------------------------------------------- /docs/img/504bef57162c863b6a965fac9be10377.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/504bef57162c863b6a965fac9be10377.jpg -------------------------------------------------------------------------------- /docs/img/538e4461fb4b4cc380ce7b29759028f8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/538e4461fb4b4cc380ce7b29759028f8.jpg -------------------------------------------------------------------------------- /docs/img/53e4614735001004cf10a5404203ea71.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/53e4614735001004cf10a5404203ea71.jpg -------------------------------------------------------------------------------- /docs/img/54280984e9f8f3b22316893807c1a52e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/54280984e9f8f3b22316893807c1a52e.jpg -------------------------------------------------------------------------------- /docs/img/56afbfa748895a916cb9a83cb407e791.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/56afbfa748895a916cb9a83cb407e791.jpg -------------------------------------------------------------------------------- /docs/img/596080c3f68a2e0f8ba4ca54f064272d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/596080c3f68a2e0f8ba4ca54f064272d.jpg -------------------------------------------------------------------------------- /docs/img/5a539b08d07773dbba46f659b5d1743c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/5a539b08d07773dbba46f659b5d1743c.jpg -------------------------------------------------------------------------------- /docs/img/5a58343f3bd5e027d97e90721b1c4a53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/5a58343f3bd5e027d97e90721b1c4a53.jpg -------------------------------------------------------------------------------- /docs/img/5c9510eede5c19eda3992c95d2bcb565.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/5c9510eede5c19eda3992c95d2bcb565.jpg -------------------------------------------------------------------------------- /docs/img/5e6dbbe03affb0bf5a05415f48a771ad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/5e6dbbe03affb0bf5a05415f48a771ad.jpg -------------------------------------------------------------------------------- /docs/img/5fc5f2d4ce90f29c2e50b128607f8bd3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/5fc5f2d4ce90f29c2e50b128607f8bd3.jpg -------------------------------------------------------------------------------- /docs/img/60354a5e7e39d04c97a1ee14b3b5db1b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/60354a5e7e39d04c97a1ee14b3b5db1b.jpg -------------------------------------------------------------------------------- /docs/img/6094d3e9eaea24f4f064dfcd2ea91ddc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6094d3e9eaea24f4f064dfcd2ea91ddc.jpg -------------------------------------------------------------------------------- /docs/img/6331a77064535de9dc0a93e8b103f00d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6331a77064535de9dc0a93e8b103f00d.jpg -------------------------------------------------------------------------------- /docs/img/63f4d90dfe1598c08abff7ee025b9a0b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/63f4d90dfe1598c08abff7ee025b9a0b.jpg -------------------------------------------------------------------------------- /docs/img/671697da89293504fef04cfadad29c6b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/671697da89293504fef04cfadad29c6b.jpg -------------------------------------------------------------------------------- /docs/img/67a209e3d95dcfc3bcf10be8ee22a065.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/67a209e3d95dcfc3bcf10be8ee22a065.jpg -------------------------------------------------------------------------------- /docs/img/6872d4e6f12488af0c0f4f9c14deb773.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6872d4e6f12488af0c0f4f9c14deb773.jpg -------------------------------------------------------------------------------- /docs/img/6ac783bbfde215c4acea8b0c79576f88.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6ac783bbfde215c4acea8b0c79576f88.jpg -------------------------------------------------------------------------------- /docs/img/6adc3a15f96ef6e3c0d50782fc63af32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6adc3a15f96ef6e3c0d50782fc63af32.jpg -------------------------------------------------------------------------------- /docs/img/6efbaae64acdb4e69214c7589963b5bd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6efbaae64acdb4e69214c7589963b5bd.jpg -------------------------------------------------------------------------------- /docs/img/6f6aa6594bc5ce80d77b48a2abe7c75e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/6f6aa6594bc5ce80d77b48a2abe7c75e.jpg -------------------------------------------------------------------------------- /docs/img/70a9514350dec1b5880953cebd0fae0a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/70a9514350dec1b5880953cebd0fae0a.jpg -------------------------------------------------------------------------------- /docs/img/71481f97c660d6556a1bf3c5b70648bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/71481f97c660d6556a1bf3c5b70648bc.jpg -------------------------------------------------------------------------------- /docs/img/72b521dd094d336233ce321ce73811a2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/72b521dd094d336233ce321ce73811a2.jpg -------------------------------------------------------------------------------- /docs/img/744304fa9c5a5b805fd3179eb9881d70.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/744304fa9c5a5b805fd3179eb9881d70.jpg -------------------------------------------------------------------------------- /docs/img/74c0efc42f7bf310489f953f2b5cbd0e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/74c0efc42f7bf310489f953f2b5cbd0e.jpg -------------------------------------------------------------------------------- /docs/img/77d7b4598127e8b587d29da009865dde.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/77d7b4598127e8b587d29da009865dde.jpg -------------------------------------------------------------------------------- /docs/img/7874a6d1f9758b18ee1ef3d3e4f58334.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/7874a6d1f9758b18ee1ef3d3e4f58334.jpg -------------------------------------------------------------------------------- /docs/img/7c8aa302666166e4fa6969572c501f04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/7c8aa302666166e4fa6969572c501f04.jpg -------------------------------------------------------------------------------- /docs/img/7ebef81ff83b49c4f531247f8fb26cc7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/7ebef81ff83b49c4f531247f8fb26cc7.jpg -------------------------------------------------------------------------------- /docs/img/823633047587a7e6edb407963de58da0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/823633047587a7e6edb407963de58da0.jpg -------------------------------------------------------------------------------- /docs/img/82f73ddadae94db3c7fa209585564d41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/82f73ddadae94db3c7fa209585564d41.jpg -------------------------------------------------------------------------------- /docs/img/843b3c0a68065ac101f04944c2bac053.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/843b3c0a68065ac101f04944c2bac053.jpg -------------------------------------------------------------------------------- /docs/img/883cefe5eed8bb91f8afda3e8466c83b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/883cefe5eed8bb91f8afda3e8466c83b.jpg -------------------------------------------------------------------------------- /docs/img/8a804a5303e6f2a4f62d47582241129b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/8a804a5303e6f2a4f62d47582241129b.jpg -------------------------------------------------------------------------------- /docs/img/8e1ee291a6d4a348a3629298a80fefbd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/8e1ee291a6d4a348a3629298a80fefbd.jpg -------------------------------------------------------------------------------- /docs/img/9036abd8c344a4a541cfb80139d9e0d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/9036abd8c344a4a541cfb80139d9e0d3.jpg -------------------------------------------------------------------------------- /docs/img/9146e41d31ff53b16fd2fbb13d3f823e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/9146e41d31ff53b16fd2fbb13d3f823e.jpg -------------------------------------------------------------------------------- /docs/img/91f2efcb7aedc6b7c1fb02870373fc54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/91f2efcb7aedc6b7c1fb02870373fc54.jpg -------------------------------------------------------------------------------- /docs/img/941e20c7d0c048025948f404e3fb4668.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/941e20c7d0c048025948f404e3fb4668.jpg -------------------------------------------------------------------------------- /docs/img/966f97e15792c89ebeb6f5f8942b0ee5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/966f97e15792c89ebeb6f5f8942b0ee5.jpg -------------------------------------------------------------------------------- /docs/img/97cad8fbf9745375f3af2d417ebcad07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/97cad8fbf9745375f3af2d417ebcad07.jpg -------------------------------------------------------------------------------- /docs/img/9bd0f09416c906b80796a1f54cff8df4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/9bd0f09416c906b80796a1f54cff8df4.jpg -------------------------------------------------------------------------------- /docs/img/9c5ebd78eb1d6f93cea18eb55b708e26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/9c5ebd78eb1d6f93cea18eb55b708e26.jpg -------------------------------------------------------------------------------- /docs/img/9faa714fe3700fc2441dae01484b73c3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/9faa714fe3700fc2441dae01484b73c3.jpg -------------------------------------------------------------------------------- /docs/img/a020c75900e58cd1f603f8e5e68bcd58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a020c75900e58cd1f603f8e5e68bcd58.jpg -------------------------------------------------------------------------------- /docs/img/a08ca500d9d2d3de81de36faa715c9a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a08ca500d9d2d3de81de36faa715c9a4.jpg -------------------------------------------------------------------------------- /docs/img/a2027e0feffd6a4445ba2e70bafd7e01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a2027e0feffd6a4445ba2e70bafd7e01.jpg -------------------------------------------------------------------------------- /docs/img/a24879ba48cc2b7501b7b33c35f7dc27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a24879ba48cc2b7501b7b33c35f7dc27.jpg -------------------------------------------------------------------------------- /docs/img/a27d316530f4f9a8d71898076641b9ef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a27d316530f4f9a8d71898076641b9ef.jpg -------------------------------------------------------------------------------- /docs/img/a49e87363988856b8eabf42c30cf9400.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a49e87363988856b8eabf42c30cf9400.jpg -------------------------------------------------------------------------------- /docs/img/a60b759f387958b2b4c7046ecd6f4b87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a60b759f387958b2b4c7046ecd6f4b87.jpg -------------------------------------------------------------------------------- /docs/img/a6f06b37951c44452f79efd047298429.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a6f06b37951c44452f79efd047298429.jpg -------------------------------------------------------------------------------- /docs/img/a783141f02a6302a2f1e80908156dc5d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a783141f02a6302a2f1e80908156dc5d.jpg -------------------------------------------------------------------------------- /docs/img/a9c26e973da367c3f6e0289252c0c55a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/a9c26e973da367c3f6e0289252c0c55a.jpg -------------------------------------------------------------------------------- /docs/img/ab786df4859e36d6feeabac1f97dc5f2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/ab786df4859e36d6feeabac1f97dc5f2.jpg -------------------------------------------------------------------------------- /docs/img/af9cd039b8bc48207cfd140b3bd3dd1c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/af9cd039b8bc48207cfd140b3bd3dd1c.jpg -------------------------------------------------------------------------------- /docs/img/b096b6df86baa4af3f1d9b86a8b57af2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b096b6df86baa4af3f1d9b86a8b57af2.jpg -------------------------------------------------------------------------------- /docs/img/b183ab9d09b4460a2626a0004e1f1b00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b183ab9d09b4460a2626a0004e1f1b00.jpg -------------------------------------------------------------------------------- /docs/img/b18a764c1fce5b869fc970d63229d0d9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b18a764c1fce5b869fc970d63229d0d9.jpg -------------------------------------------------------------------------------- /docs/img/b1cecef71e11f781248c0be0b90beddd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b1cecef71e11f781248c0be0b90beddd.jpg -------------------------------------------------------------------------------- /docs/img/b1fb57a653c6741ced779c294ca87447.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b1fb57a653c6741ced779c294ca87447.jpg -------------------------------------------------------------------------------- /docs/img/b2c2549d84491412df87f80cf61fbbdc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b2c2549d84491412df87f80cf61fbbdc.jpg -------------------------------------------------------------------------------- /docs/img/b49bf74e6651a4fea2a00aefd48f3b71.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b49bf74e6651a4fea2a00aefd48f3b71.jpg -------------------------------------------------------------------------------- /docs/img/b4dc9a1dbd2f3dbfa9b8223a63b62c12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b4dc9a1dbd2f3dbfa9b8223a63b62c12.jpg -------------------------------------------------------------------------------- /docs/img/b572dd0f882ff709fb5896b3f7c9905f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b572dd0f882ff709fb5896b3f7c9905f.jpg -------------------------------------------------------------------------------- /docs/img/b59cd2b0d0a998425f408fe5543c9e37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b59cd2b0d0a998425f408fe5543c9e37.jpg -------------------------------------------------------------------------------- /docs/img/b726bf5bcea4b7fc5dd8a2908ec4d963.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b726bf5bcea4b7fc5dd8a2908ec4d963.jpg -------------------------------------------------------------------------------- /docs/img/b76892fe0218d67c9bf34e469d9dc0a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b76892fe0218d67c9bf34e469d9dc0a4.jpg -------------------------------------------------------------------------------- /docs/img/b7a7593691fc70c549881f1570ecc3b1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b7a7593691fc70c549881f1570ecc3b1.jpg -------------------------------------------------------------------------------- /docs/img/b968cc0aef66f5044316ef16f602586b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/b968cc0aef66f5044316ef16f602586b.jpg -------------------------------------------------------------------------------- /docs/img/bbadfcdfb92f4eda0d40720b8d0e771e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/bbadfcdfb92f4eda0d40720b8d0e771e.jpg -------------------------------------------------------------------------------- /docs/img/bd56787dddab1c008d47ba1c7a8024c6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/bd56787dddab1c008d47ba1c7a8024c6.jpg -------------------------------------------------------------------------------- /docs/img/bdac172cb293a59affa870d6d1998358.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/bdac172cb293a59affa870d6d1998358.jpg -------------------------------------------------------------------------------- /docs/img/be30d3c5aa2158a9864d173116eb6291.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/be30d3c5aa2158a9864d173116eb6291.jpg -------------------------------------------------------------------------------- /docs/img/be653e10825576897782b24bebe362dd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/be653e10825576897782b24bebe362dd.jpg -------------------------------------------------------------------------------- /docs/img/c001705e2cbb8d9befa1f91127a880e3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c001705e2cbb8d9befa1f91127a880e3.jpg -------------------------------------------------------------------------------- /docs/img/c145c7271f700e11aa378a211bb94dff.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c145c7271f700e11aa378a211bb94dff.jpg -------------------------------------------------------------------------------- /docs/img/c270198655afac039b29c13193a5885a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c270198655afac039b29c13193a5885a.jpg -------------------------------------------------------------------------------- /docs/img/c2a6a40115692ff004dc8fce43168e64.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c2a6a40115692ff004dc8fce43168e64.jpg -------------------------------------------------------------------------------- /docs/img/c42c47fbf14b6aaa7f986d9a92760b12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c42c47fbf14b6aaa7f986d9a92760b12.jpg -------------------------------------------------------------------------------- /docs/img/c5c710d4eea36d37879737f96ff29bc9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c5c710d4eea36d37879737f96ff29bc9.jpg -------------------------------------------------------------------------------- /docs/img/c5f854a140b5ba105f0ef20d4ef12150.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/c5f854a140b5ba105f0ef20d4ef12150.jpg -------------------------------------------------------------------------------- /docs/img/ca67319c33ab1709f8fd3eafa79c6dfb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/ca67319c33ab1709f8fd3eafa79c6dfb.jpg -------------------------------------------------------------------------------- /docs/img/cada3d59a1bd4887694d8ded4576f519.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/cada3d59a1bd4887694d8ded4576f519.jpg -------------------------------------------------------------------------------- /docs/img/cb722e238db4c81d1854b65097d597a9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/cb722e238db4c81d1854b65097d597a9.jpg -------------------------------------------------------------------------------- /docs/img/cb9724ae989ef2c079731874772a1798.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/cb9724ae989ef2c079731874772a1798.jpg -------------------------------------------------------------------------------- /docs/img/cf4c779d69c693df5e8c1e309437d6ef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/cf4c779d69c693df5e8c1e309437d6ef.jpg -------------------------------------------------------------------------------- /docs/img/d08118dfea2a3c65bb9fb3442f0f1ead.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/d08118dfea2a3c65bb9fb3442f0f1ead.jpg -------------------------------------------------------------------------------- /docs/img/d307bb30c80bcdc37eb773b73a87a095.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/d307bb30c80bcdc37eb773b73a87a095.jpg -------------------------------------------------------------------------------- /docs/img/d7d2af89a8c3b111fe7af988097bbb40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/d7d2af89a8c3b111fe7af988097bbb40.jpg -------------------------------------------------------------------------------- /docs/img/da268e0c364d3bc6fcbf891258c7d557.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/da268e0c364d3bc6fcbf891258c7d557.jpg -------------------------------------------------------------------------------- /docs/img/deb55c16c07fa22d5f0e10f36f49e448.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/deb55c16c07fa22d5f0e10f36f49e448.jpg -------------------------------------------------------------------------------- /docs/img/deee1c79e1cf5a6bd033391e65334fe7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/deee1c79e1cf5a6bd033391e65334fe7.jpg -------------------------------------------------------------------------------- /docs/img/df86fab3b666cb94ac00348b799147b2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/df86fab3b666cb94ac00348b799147b2.jpg -------------------------------------------------------------------------------- /docs/img/dfd62755502ca81aebecea9632e215b4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/dfd62755502ca81aebecea9632e215b4.jpg -------------------------------------------------------------------------------- /docs/img/dfeb48b2ab36e759c1a0397c54d6b925.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/dfeb48b2ab36e759c1a0397c54d6b925.jpg -------------------------------------------------------------------------------- /docs/img/e03df8ccfe07cbd4e2c14160804b959b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e03df8ccfe07cbd4e2c14160804b959b.jpg -------------------------------------------------------------------------------- /docs/img/e182cb14d2bc6ad50a2c3a4c7b527cb4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e182cb14d2bc6ad50a2c3a4c7b527cb4.jpg -------------------------------------------------------------------------------- /docs/img/e1a3038b12827bae5b81fcd02191e14a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e1a3038b12827bae5b81fcd02191e14a.jpg -------------------------------------------------------------------------------- /docs/img/e1cf4ef1a7f5301ee63ded4806461cb2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e1cf4ef1a7f5301ee63ded4806461cb2.jpg -------------------------------------------------------------------------------- /docs/img/e1ecb442d3cf63667cc8d8f265ea6fb7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e1ecb442d3cf63667cc8d8f265ea6fb7.jpg -------------------------------------------------------------------------------- /docs/img/e1fe0af3cb6c0d5c97380258734cdce9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e1fe0af3cb6c0d5c97380258734cdce9.jpg -------------------------------------------------------------------------------- /docs/img/e22af26e044860eabf29f3813b1dfa8b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e22af26e044860eabf29f3813b1dfa8b.jpg -------------------------------------------------------------------------------- /docs/img/e4b79ccb91cef551723600488e9cb81b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e4b79ccb91cef551723600488e9cb81b.jpg -------------------------------------------------------------------------------- /docs/img/e4dfab9c6e230bb2f91a6b0715c548d7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e4dfab9c6e230bb2f91a6b0715c548d7.jpg -------------------------------------------------------------------------------- /docs/img/e57ee6ed25a87b23c3a3cfe92e1fa1fe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e57ee6ed25a87b23c3a3cfe92e1fa1fe.jpg -------------------------------------------------------------------------------- /docs/img/e58b77134f9f1ef5de60f6715f4181ef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e58b77134f9f1ef5de60f6715f4181ef.jpg -------------------------------------------------------------------------------- /docs/img/e60f6a76e7fe2549ced2f64702af8620.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e60f6a76e7fe2549ced2f64702af8620.jpg -------------------------------------------------------------------------------- /docs/img/e6109601b6daf8134d2007b85d72e77a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e6109601b6daf8134d2007b85d72e77a.jpg -------------------------------------------------------------------------------- /docs/img/e67c0c741c049ebf8163523792e9e8d0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e67c0c741c049ebf8163523792e9e8d0.jpg -------------------------------------------------------------------------------- /docs/img/e700a43a387c917fef1acdb35ac275a0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e700a43a387c917fef1acdb35ac275a0.jpg -------------------------------------------------------------------------------- /docs/img/e9d03180e4231af35183a0c4f9ff6277.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/e9d03180e4231af35183a0c4f9ff6277.jpg -------------------------------------------------------------------------------- /docs/img/eabd6215fba57ca6e4a5ab91823da3c2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/eabd6215fba57ca6e4a5ab91823da3c2.jpg -------------------------------------------------------------------------------- /docs/img/eb28ce9a1b0629a41bede0d2fb88d1a2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/eb28ce9a1b0629a41bede0d2fb88d1a2.jpg -------------------------------------------------------------------------------- /docs/img/ec69b97f82c9ef2d0bac39c941f21ed9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/ec69b97f82c9ef2d0bac39c941f21ed9.jpg -------------------------------------------------------------------------------- /docs/img/f10feda9b4de908651d49d99ae3924e4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f10feda9b4de908651d49d99ae3924e4.jpg -------------------------------------------------------------------------------- /docs/img/f177725bc03d4c71b4a00e1334990e57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f177725bc03d4c71b4a00e1334990e57.jpg -------------------------------------------------------------------------------- /docs/img/f1f56d1db3e8574fad782a6392cbb56c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f1f56d1db3e8574fad782a6392cbb56c.jpg -------------------------------------------------------------------------------- /docs/img/f713e77b9a67592c539974f0fd3c7bbe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f713e77b9a67592c539974f0fd3c7bbe.jpg -------------------------------------------------------------------------------- /docs/img/f7ac284ac78f49d58761139b6641f9fb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f7ac284ac78f49d58761139b6641f9fb.jpg -------------------------------------------------------------------------------- /docs/img/f8756b4a6882e933bfd6fc3f8f1fe1b6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f8756b4a6882e933bfd6fc3f8f1fe1b6.jpg -------------------------------------------------------------------------------- /docs/img/f8cf080d83de7cdd12b501d273967d21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f8cf080d83de7cdd12b501d273967d21.jpg -------------------------------------------------------------------------------- /docs/img/f9a64d9604d279e122057d7ac9086909.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/f9a64d9604d279e122057d7ac9086909.jpg -------------------------------------------------------------------------------- /docs/img/fac89ca5c417cab74c1eae70c7d3c4b4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/fac89ca5c417cab74c1eae70c7d3c4b4.jpg -------------------------------------------------------------------------------- /docs/img/fb0c1e80aa99b4e5cdf8e4159b31d784.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/fb0c1e80aa99b4e5cdf8e4159b31d784.jpg -------------------------------------------------------------------------------- /docs/img/fc1e1a56cd0872dc8e3ed3e671b21bfb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/fc1e1a56cd0872dc8e3ed3e671b21bfb.jpg -------------------------------------------------------------------------------- /docs/img/fcfe05a322371b16b27393f14b96f8b2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/fcfe05a322371b16b27393f14b96f8b2.jpg -------------------------------------------------------------------------------- /docs/img/fd7b94854e84159bef1cf070eb492474.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/fd7b94854e84159bef1cf070eb492474.jpg -------------------------------------------------------------------------------- /docs/img/ff4ca6bf3d6ff81f610c0b9de5338c3f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/ff4ca6bf3d6ff81f610c0b9de5338c3f.jpg -------------------------------------------------------------------------------- /docs/img/ffcf168eb33ec6fc29c5af6ac197b5ef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonspot-zh/HEAD/docs/img/ffcf168eb33ec6fc29c5af6ac197b5ef.jpg -------------------------------------------------------------------------------- /asset/moon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /asset/share.css: -------------------------------------------------------------------------------- 1 | #share-btn { 2 | position: fixed; 3 | right: 15px; 4 | top: 220px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | background-image: url('share.svg'); 15 | } -------------------------------------------------------------------------------- /asset/edit.css: -------------------------------------------------------------------------------- 1 | #edit-btn { 2 | position: fixed; 3 | right: 15px; 4 | top: 260px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | background-image: url(edit.svg); 15 | } -------------------------------------------------------------------------------- /asset/sidebar.min.css: -------------------------------------------------------------------------------- 1 | .sidebar-nav li{position:relative;margin:0;cursor:pointer}.sidebar-nav ul:not(.app-sub-sidebar)>li:not(.file)::before{content:'';display:block;position:absolute;top:11px;left:-12px;height:6px;width:6px;border-right:1px solid #505d6b;border-bottom:1px solid #505d6b;transform:rotate(-45deg);transition:transform .1s}.sidebar-nav ul:not(.app-sub-sidebar)>li.open::before{transform:rotate(45deg)}.sidebar-nav ul:not(.app-sub-sidebar)>li.collapse::before{transform:rotate(-45deg)} -------------------------------------------------------------------------------- /asset/docsify-baidu-push.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | new Image().src = 5 | '//api.share.baidu.com/s.gif?r=' + 6 | encodeURIComponent(document.referrer) + 7 | "&l=" + encodeURIComponent(location.href) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/edit.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var editBtn = document.createElement('div') 3 | editBtn.id = 'edit-btn' 4 | document.body.append(editBtn) 5 | 6 | var repo = window.$docsify.repo 7 | editBtn.addEventListener('click', function() { 8 | if (!repo) return 9 | if (!/https?:\/\//.exec(repo)) 10 | repo = 'https://github.com/' + repo 11 | var url = repo + '/tree/master' + 12 | location.hash.slice(1) + '.md' 13 | window.open(url) 14 | }) 15 | }) -------------------------------------------------------------------------------- /asset/back-to-top.css: -------------------------------------------------------------------------------- 1 | #scroll-btn { 2 | position: fixed; 3 | right: 15px; 4 | bottom: 10px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | background-image: url(up.svg); 15 | background-position-y: -1px; 16 | display: none; 17 | border: 2px solid; 18 | border-radius: 4px; 19 | } -------------------------------------------------------------------------------- /asset/docsify-cnzz.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | var sc = document.createElement('script') 5 | sc.src = 'https://s5.cnzz.com/z_stat.php?id=' + 6 | window.$docsify.cnzzId + '&online=1&show=line' 7 | document.querySelector('article').appendChild(sc) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-baidu-stat.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | window._hmt = window._hmt || [] 5 | var hm = document.createElement("script") 6 | hm.src = "https://hm.baidu.com/hm.js?" + window.$docsify.bdStatId 7 | document.querySelector("article").appendChild(hm) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/dark-mode.css: -------------------------------------------------------------------------------- 1 | #dark-mode-btn { 2 | position: fixed; 3 | right: 15px; 4 | top: 100px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | transition: background-image .15s ease-in-out .15s; 15 | } 16 | 17 | .dark-logo { 18 | background-image: url('sun.svg'); 19 | } 20 | 21 | .light-logo { 22 | background-image: url('moon.svg'); 23 | } -------------------------------------------------------------------------------- /asset/sun.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /asset/back-to-top.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var scrollBtn = document.createElement('div') 3 | scrollBtn.id = 'scroll-btn' 4 | document.body.append(scrollBtn) 5 | 6 | window.addEventListener('scroll', function() { 7 | var offset = window.document.documentElement.scrollTop; 8 | scrollBtn.style.display = offset >= 500 ? "block" : "none"; 9 | }) 10 | scrollBtn.addEventListener('click', function(e) { 11 | e.stopPropagation(); 12 | var step = window.scrollY / 15; 13 | var hdl = setInterval(function() { 14 | window.scrollTo(0, window.scrollY - step); 15 | if(window.scrollY <= 0) { 16 | clearInterval(hdl) 17 | } 18 | }, 15) 19 | }) 20 | }) -------------------------------------------------------------------------------- /asset/right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1209 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /asset/up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1211 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /asset/left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1210 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /asset/docsify-quick-page.css: -------------------------------------------------------------------------------- 1 | #prev-page-button { 2 | position:fixed; 3 | top:140px; 4 | width: 35px; 5 | height: 35px; 6 | right: 15px; 7 | background-color: transparent; 8 | background-image: url(left.svg); 9 | background-repeat: no-repeat; 10 | background-size: cover; 11 | border:0; 12 | -webkit-user-select: none; 13 | -moz-user-select: none; 14 | -ms-user-select: none; 15 | user-select: none; 16 | outline:none; 17 | cursor: pointer; 18 | } 19 | 20 | #next-page-button { 21 | position:fixed; 22 | top:180px; 23 | width:35px; 24 | height:35px; 25 | right:15px; 26 | background-color: transparent; 27 | background-image: url(right.svg); 28 | background-repeat: no-repeat; 29 | background-size: cover; 30 | border:0; 31 | -webkit-user-select: none; 32 | -moz-user-select: none; 33 | -ms-user-select: none; 34 | user-select: none; 35 | outline:none; 36 | cursor: pointer; 37 | } -------------------------------------------------------------------------------- /docs/70.md: -------------------------------------------------------------------------------- 1 | # wxPython 2 | 3 | > 原文: [https://pythonspot.com/wx/](https://pythonspot.com/wx/) 4 | 5 | ![wxTabs](img/060d78bee47f73f41d63d11356e21d3b.jpg) 6 | 7 | 一个 wxPython 应用程序 8 | 9 | 在本教程系列中,您将学习使用 wxPython 模块进行[图形(GUI)编程](https://pythonspot.com/gui)的基础。 它是跨平台的:应用程序可以在 Microsoft Windows,Apple OS X 和大多数 Unix 系统上运行。 10 | 11 | 使用 **wxPython** 制作的应用程序具有本机系统界面,而无需更改代码。 12 | 13 | ## 目录 14 | 15 | 16 | * [Wx 窗口](https://pythonspot.com/wxpython-window/) 17 | * [Wx 按钮](https://pythonspot.com/wxpython-buttons/) 18 | * [Wx 对话框](https://pythonspot.com/wxpython-dialogs/) 19 | * [Wx 文件对话框](https://pythonspot.com/wxpython-file-dialog/) 20 | * [Wx 输入对话框](https://pythonspot.com/wxpython-input-dialog/) 21 | * [Wx 文件菜单](https://pythonspot.com/wxpython-menu-2) 22 | * [Wx 标签](https://pythonspot.com/wxpython-tabs/) 23 | * [Wx 创建 GUI](https://pythonspot.com/creating-a-gui-in-python-with-wxwidgets-tutorial-for-beginners/) -------------------------------------------------------------------------------- /docs/5.md: -------------------------------------------------------------------------------- 1 | # 字符串(第 2 部分) 2 | 3 | > 原文: [https://pythonspot.com/string-slices-part-2/](https://pythonspot.com/string-slices-part-2/) 4 | 5 | 字符串是一系列字符,它们通常用于显示文本。 6 | 7 | 要定义字符串,只需在引号之间输入文本。 Python 接受单引号,双引号和三引号。 8 | 9 | ## 字符串索引 10 | 11 | Python 为字符串的字符建立索引,每个索引都与一个唯一字符相关联。 例如,字符串`"python"`中的字符具有索引: 12 | 13 | ![String](img/9faa714fe3700fc2441dae01484b73c3.jpg) 14 | 15 | 字符串编号 16 | 17 | ## 字符串中的字符 18 | 19 | 第 0 个索引用于字符串的第一个字符。 请尝试以下操作: 20 | 21 | ```py 22 | #!/usr/bin/python 23 | 24 | s = "Hello Python" 25 | print(s) # prints whole string 26 | print(s[0]) # prints "H" 27 | print(s[1]) # prints "e" 28 | 29 | ``` 30 | 31 | ## 字符串切片 32 | 33 | 给定字符串`s`,切片的语法为: 34 | 35 | ```py 36 | s[ startIndex : pastIndex ] 37 | 38 | ``` 39 | 40 | `startIndex`是字符串的起始索引。`pastIndex`是切片末尾加 1。 41 | 42 | 如果省略第一个索引,则切片将从头开始。 如果省略最后一个索引,则切片将转到字符串的末尾。 例如: 43 | 44 | ```py 45 | #!/usr/bin/python 46 | 47 | s = "Hello Python" 48 | print(s[0:2]) # prints "He" 49 | print(s[2:4]) # prints "ll" 50 | print(s[6:]) # prints "Python" 51 | 52 | ``` 53 | 54 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/86.md: -------------------------------------------------------------------------------- 1 | # Matplotlib 将图形保存到图像文件 2 | 3 | > 原文: [https://pythonspot.com/matplotlib-save-figure-to-image-file/](https://pythonspot.com/matplotlib-save-figure-to-image-file/) 4 | 5 | ## 保存图形 6 | 7 | [Matplotlib](https://pythonspot.com/matplotlib/)可以使用`savefig()`将图直接保存到文件中。 8 | 9 | 该方法可以像这样使用: 10 | 11 | ```py 12 | 13 | fig.savefig('plot.png') 14 | 15 | ``` 16 | 17 | 完整的例子: 18 | 19 | ```py 20 | 21 | import matplotlib 22 | import matplotlib.pyplot as plt 23 | import numpy as np 24 | 25 | y = [2,4,6,8,10,12,14,16,18,20] 26 | x = np.arange(10) 27 | fig = plt.figure() 28 | ax = plt.subplot(111) 29 | ax.plot(x, y, label='$y = numbers') 30 | plt.title('Legend inside') 31 | ax.legend() 32 | #plt.show() 33 | 34 | fig.savefig('plot.png') 35 | 36 | ``` 37 | 38 | 要更改格式,只需更改扩展名,如下所示: 39 | 40 | ```py 41 | 42 | fig.savefig('plot.pdf') 43 | 44 | ``` 45 | 46 | 您可以使用打开文件 47 | 48 | ```py 49 | 50 | display plot.png 51 | 52 | ``` 53 | 54 | 或在图片或 pdf 查看器中打开它, 55 | 56 | ![matplotlib-plot-save](img/fc1e1a56cd0872dc8e3ed3e671b21bfb.jpg) 57 | 58 | 保存到 pdf 的图 59 | 60 | [下载示例](https://pythonspot.com/download-matplotlib-examples/) -------------------------------------------------------------------------------- /asset/edit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Edit 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/36.md: -------------------------------------------------------------------------------- 1 | # Python 图 2 | 3 | > 原文: [https://pythonspot.com/python-graph/](https://pythonspot.com/python-graph/) 4 | 5 | ## 介绍 6 | 7 | 数学和计算机科学中的图由节点组成,这些节点可以相互连接,也可以不相互连接。 节点之间的连接称为边。图可以是有向的(箭头)或无向的。 边可以表示距离或重量。 8 | 9 | ![graph mathematics](img/eabd6215fba57ca6e4a5ab91823da3c2.jpg) 10 | 11 | 默认图(左),有向图(右) 12 | 13 | Python 没有图数据类型。 要使用图,我们可以使用模块,也可以自己实现: 14 | 15 | * 自己实现图 16 | 17 | * `networkx`模块 18 | 19 | ## Python 中的图 20 | 21 | 有向图可以定义为: 22 | 23 | ```py 24 | #!/usr/bin/env python 25 | 26 | graph = {'A': ['B', 'C'], 27 | 'B': ['C', 'A'], 28 | 'C': ['D'], 29 | 'D': ['A']} 30 | 31 | print(graph) 32 | 33 | ``` 34 | 35 | ## 使用`networkx`的图 36 | 37 | `networkx`软件模块支持创建,处理图。 38 | 39 | ```py 40 | #!/usr/bin/env python 41 | import networkx as nx 42 | 43 | G=nx.Graph() 44 | G.add_node("A") 45 | G.add_node("B") 46 | G.add_node("C") 47 | G.add_edge("A","B") 48 | G.add_edge("B","C") 49 | G.add_edge("C","A") 50 | 51 | print("Nodes: " + str(G.nodes())) 52 | print("Edges: " + str(G.edges())) 53 | 54 | ``` 55 | 56 | 结果: 57 | 58 | ```py 59 | Nodes: [‘A’, ‘C’, ‘B’] 60 | Edges: [(‘A’, ‘C’), (‘A’, ‘B’), (‘C’, ‘B’)] 61 | 62 | ``` -------------------------------------------------------------------------------- /docs/9.md: -------------------------------------------------------------------------------- 1 | # 函数 2 | 3 | > 原文: [https://pythonspot.com/functions/](https://pythonspot.com/functions/) 4 | 5 | 函数是可重用的代码,可以在程序中的任何位置调用。 函数提高了代码的可读性:使用函数而不是冗长的指令列表,使人们更容易理解代码。 6 | 7 | 最重要的是,可以重复使用或修改函数,这也提高了可测试性和可扩展性。 8 | 9 | ## 函数定义 10 | 11 | 我们使用以下语法来定义函数: 12 | 13 | ```py 14 | def function(parameters): 15 | instructions 16 | return value 17 | 18 | ``` 19 | 20 | **`def`关键字**告诉 Python 我们有一段可重用的代码(一个函数)。 一个程序可以具有许多函数。 21 | 22 | ## 实际例子 23 | 24 | 我们可以使用`function(parameters)`来调用函数。 25 | 26 | ```py 27 | #!/usr/bin/python 28 | 29 | def f(x): 30 | return(x*x) 31 | 32 | print(f(3)) 33 | 34 | ``` 35 | 36 | 输出: 37 | 38 | ```py 39 | 9 40 | 41 | ``` 42 | 43 | 该函数具有一个参数`x`。 返回值是函数返回的值。 并非所有函数都必须返回某些内容。 44 | 45 | ## 参数 46 | 47 | 您可以传递多个变量: 48 | 49 | ```py 50 | #!/usr/bin/python 51 | 52 | def f(x,y): 53 | print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y)) 54 | print('x * y = ' + str(x*y)) 55 | 56 | f(3,2) 57 | 58 | ``` 59 | 60 | 输出: 61 | 62 | ```py 63 | 64 | You called f(x,y) with the value x = 3 and y = 2 65 | x * y = 6 66 | 67 | ``` 68 | 69 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/22.md: -------------------------------------------------------------------------------- 1 | # Python 类 2 | 3 | > 原文: [https://pythonspot.com/python-class/](https://pythonspot.com/python-class/) 4 | 5 | Python 中的所有内容都是一个对象。 每个对象都可以包含方法和变量(具有唯一值)。 对象是从类创建(通常称为实例化)的。 6 | 7 | ## 类示例 8 | 9 | 考虑以下示例: 10 | 11 | ```py 12 | 13 | class Animal: 14 | def __init__(self,name): 15 | self.name = name 16 | 17 | def walk(self): 18 | print(self.name + ' walks.') 19 | 20 | duck = Animal('Duck') 21 | duck.walk() 22 | 23 | ``` 24 | 25 | 我们在动物类中创建了一个名为`duck`的对象。 该类具有一个可以在每个对象上调用的方法(`walk`)。 我们还有一个称为`__init__()`的方法,该方法在创建新对象时总是被调用。 每种方法都必须使用`self`关键字。 我们使用类(`self.name = ..`)设置变量。 26 | 27 | ![python class](img/cb722e238db4c81d1854b65097d597a9.jpg) 28 | 29 | 使用建模语言 UML 绘制的 Python 类和对象 30 | 31 | 创建对象后,我们可以调用其方法并无限期使用其变量。 同一类的每个对象都具有相同的方法,但是其变量内容可能有所不同。 32 | 33 | Python 程序可能包含许多类和对象。 为了证明这一点,我们从一个类创建两个对象: 34 | 35 | ```py 36 | 37 | class Animal: 38 | def __init__(self,name): 39 | self.name = name 40 | 41 | def walk(self): 42 | print(self.name + ' walks.') 43 | 44 | duck = Animal('Duck') 45 | duck.walk() 46 | 47 | rhino = Animal('African Rhino') 48 | rhino.walk() 49 | 50 | ``` 51 | 52 | [下载练习](https://pythonspot.com/download-oop-exercises/) -------------------------------------------------------------------------------- /docs/14.md: -------------------------------------------------------------------------------- 1 | # Python 元组 2 | 3 | > 原文: [https://pythonspot.com/python-tuples/](https://pythonspot.com/python-tuples/) 4 | 5 | 元组数据结构用于存储一组数据。 该组中的元素用逗号分隔。 创建后,元组的值将无法更改。 6 | 7 | ## Python 元组 8 | 9 | Python 中的空元组将定义为: 10 | 11 | ```py 12 | tuple = () 13 | 14 | ``` 15 | 16 | 具有一个项目的元组需要逗号: 17 | 18 | ```py 19 | tuple = (3,) 20 | 21 | ``` 22 | 23 | 一项的逗号可能很直观,但是如果没有一项的逗号,则无法访问该元素。 对于多个项目,您不必在末尾加逗号。 此集是一个示例: 24 | 25 | ```py 26 | personInfo = ("Diana", 32, "New York") 27 | 28 | ``` 29 | 30 | 元组中的数据可以是一种或多种数据类型,例如文本和数字。 31 | 32 | ## 数据存取 33 | 34 | 要访问数据,我们可以简单地使用索引。 通常,索引是括号之间的数字: 35 | 36 | ```py 37 | #!/usr/bin/env python 38 | 39 | personInfo = ("Diana", 32, "New York") 40 | print(personInfo[0]) 41 | print(personInfo[1]) 42 | 43 | ``` 44 | 45 | 如果要一次分配多个变量,则可以使用元组: 46 | 47 | ```py 48 | #!/usr/bin/env python 49 | 50 | name,age,country,career = ('Diana',32,'Canada','CompSci') 51 | print(country) 52 | 53 | ``` 54 | 55 | 在右侧记录了元组。 等于运算符的左侧是对应的输出变量。 56 | 57 | ## 附加到 Python 中的元组 58 | 59 | 如果您有一个现有的元组,则可以使用`+`运算符将其追加。 您只能将元组追加到现有元组。 60 | 61 | ```py 62 | #!/usr/bin/env python 63 | 64 | x = (3,4,5,6) 65 | x = x + (1,2,3) 66 | print(x) 67 | 68 | ``` 69 | 70 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/16.md: -------------------------------------------------------------------------------- 1 | # 数据类型转换 2 | 3 | > 原文: [https://pythonspot.com/datatype-casting/](https://pythonspot.com/datatype-casting/) 4 | 5 | Python 自动确定数据类型,以说明: 6 | 7 | ```py 8 | 9 | x = 3 10 | y = "text" 11 | 12 | ``` 13 | 14 | 它发现`x`是整数类型,`y`是字符串类型。 15 | 16 | 函数接受某种数据类型。 例如,`print`仅接受字符串数据类型。 17 | 18 | ## 数据类型转换 19 | 20 | 如果要打印数字,则经常需要强制转换。 21 | 22 | 在下面的示例中,我们要打印两个数字,一个整数(整数)和一个浮点数。 23 | 24 | ```py 25 | x = 3 26 | y = 2.15315315313532 27 | 28 | print("We have defined two numbers,") 29 | print("x = " + str(x)) 30 | print("y = " + str(y)) 31 | 32 | ``` 33 | 34 | 我们使用`str()`函数将变量`x`(整数)和变量`y`(浮点数)转换为字符串。 35 | 36 | 如果我们有要存储为数字的文本怎么办? 我们将不得不再次转型。 37 | 38 | ```py 39 | a = "135.31421" 40 | b = "133.1112223" 41 | 42 | c = float(a) + float(b) 43 | print(c) 44 | 45 | ``` 46 | 47 | 在上面的示例中,我们将两个具有数据类型字符串的变量强制转换为数据类型`float`。 48 | 49 | ## 转换函数 50 | 51 | 要在数据类型之间转换,可以使用: 52 | 53 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) 54 | 55 | | 函数 | 描述 | 56 | | --- | --- | 57 | | `int(x)` | 将`x`转换为整数 | 58 | | `long(x)` | 将`x`转换为长整数 | 59 | | `float(x)` | 将`x`转换为浮点数 | 60 | | `str(x)` | 将`x`转换为字符串。`x`可以是`float`类型。 整数或长整数。 | 61 | | `hex(x)` | 将`x`整数转换为十六进制字符串 | 62 | | `asc(x)` | 将`x`整数转换为字符 | 63 | | `ord(x)` | 将字符`x`转换为整数 | -------------------------------------------------------------------------------- /docs/4.md: -------------------------------------------------------------------------------- 1 | # Python 字符串 2 | 3 | > 原文: [https://pythonspot.com/python-strings/](https://pythonspot.com/python-strings/) 4 | 5 | ![python-string](img/504bef57162c863b6a965fac9be10377.jpg) 6 | 7 | 字符串,一系列字符 8 | 9 | 字符串是一系列字符,它们通常用于显示文本。 10 | 11 | 要定义字符串,只需在引号之间输入文本。 Python 接受单引号,双引号和三引号。 12 | 13 | ## 字符串输入和输出 14 | 15 | 要将文本(字符串)输出到屏幕: 16 | 17 | ```py 18 | s = "hello world" 19 | print(s) 20 | 21 | ``` 22 | 23 | 要从键盘获取文本: 24 | 25 | ```py 26 | 27 | name = input("Enter name: ") 28 | print(name) 29 | 30 | ``` 31 | 32 | 如果您使用的是**旧的 Python 版本(2.x)**,则需要使用: 33 | 34 | ```py 35 | 36 | name = raw_input("Enter name: ") 37 | print(name) 38 | 39 | ``` 40 | 41 | 要测试您的版本,请执行以下操作: 42 | 43 | ``` 44 | python –version 45 | ``` 46 | 47 | ## 字符串比较 48 | 49 | 要测试两个字符串是否相等,请使用相等运算符(`==`)。 50 | 51 | ```py 52 | #!/usr/bin/python 53 | 54 | sentence = "The cat is brown" 55 | q = "cat" 56 | 57 | if q == sentence: 58 | print('strings equal') 59 | 60 | ``` 61 | 62 | 要测试两个字符串是否相等,请使用不等运算符(`!=`) 63 | 64 | ```py 65 | #!/usr/bin/python 66 | 67 | sentence = "The cat is brown" 68 | q = "cat" 69 | 70 | if q != sentence: 71 | print('strings equal') 72 | 73 | ``` 74 | 75 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /asset/dark-mode.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var style = document.querySelector('#invert') 3 | if (style == null) { 4 | style = document.createElement('style') 5 | style.id = 'invert' 6 | document.head.append(style) 7 | } 8 | var btn = document.querySelector('#dark-mode-btn') 9 | if (btn == null) { 10 | btn = document.createElement('div') 11 | btn.id = 'dark-mode-btn' 12 | btn.classList.add('light-logo') 13 | document.body.append(btn) 14 | } 15 | 16 | var enableDarkMode = function() { 17 | style.innerText = 'html,img,pre,#dark-mode-btn{filter:invert(100%)}' 18 | btn.classList.remove('light-logo') 19 | btn.classList.add('dark-logo') 20 | localStorage.darkLight = 'dark' 21 | 22 | } 23 | var disableDarkMode = function() { 24 | style.innerText = '' 25 | btn.classList.remove('dark-logo') 26 | btn.classList.add('light-logo') 27 | localStorage.darkLight = 'light' 28 | } 29 | 30 | btn.addEventListener('click', function(){ 31 | var currMode = localStorage.darkLight || 'light' 32 | if (currMode == 'light') 33 | enableDarkMode() 34 | else 35 | disableDarkMode() 36 | }) 37 | 38 | if (localStorage.darkLight == 'dark') 39 | enableDarkMode() 40 | 41 | }) 42 | 43 | -------------------------------------------------------------------------------- /docs/66.md: -------------------------------------------------------------------------------- 1 | # GUI 简介 2 | 3 | > 原文: [https://pythonspot.com/introduction-to-gui/](https://pythonspot.com/introduction-to-gui/) 4 | 5 | 要在 Python 中创建图形界面(GUI),您需要使用库或模块。 至少有三个使用 Python 创建 GUI 的广泛使用的模块: 6 | 7 | * [Tkinter](https://pythonspot.com/tkinter/) 8 | * [PyQt4](https://pythonspot.com/pyqt4/) 9 | * [PyQT5](https://pythonspot.com/pyqt5/) 10 | * [WxWidgets(WxPython)](https://pythonspot.com/wx/) 11 | 12 | 您可以使用任何这些模块创建图形用户界面(GUI),但它们不具有相同的功能。 13 | 14 | ## GUI 工具包 15 | 16 | **Tk** 提供基本的小部件,例如按钮,菜单,文本和标签。 与 QT4 和 WxPython 相比,它非常有限,但它也是最旧的模块。 它可以在大多数版本的 Mac OS,Linux 和 Windows 上运行。 17 | 18 | ![TkMessage box](img/e9d03180e4231af35183a0c4f9ff6277.jpg) 19 | 20 | Tk 中的一个消息框。 用 Tk 制作的 GUI 没有本机外观。 21 | 22 | **QT4 和 QT5** 由 Qt 公司开发。 使用 QT4 或 QT5 制作的图形应用程序可在 Windows,Linux / X11 和 Mac OS X 上运行。它具有大量的小部件,包括选项卡,按钮,项目视图,表视图,进度条,输入字段,日历视图等等。 与 Tk 相比,它有更多可用的小部件。 23 | 24 | ![Graphical application using PyQt5](img/4c1c799e1aa4d7f3a9c4b9104ff0efe2.jpg) 25 | 26 | **WxPython** 是一个模块,可创建本机 GUI 外观,而与所使用的操作系统无关。 在 Windows 上将其视为 Windows 应用程序,而在 Mac OS 上将其视为 Mac 应用程序。 与 QT4 或 Tk 相比,这可能是一个明显的优势,具体取决于您的用途。 WxWidgets 有许多可用的小部件,例如按钮,菜单,文本,还有更高级的小部件,如`htmlview`或树控件。 27 | 28 | ![wxTabs](img/5a58343f3bd5e027d97e90721b1c4a53.jpg) 29 | 30 | 用 wxPython 创建的窗口。wxPython 在所有操作系统上都有本机外观。 -------------------------------------------------------------------------------- /docs/223.md: -------------------------------------------------------------------------------- 1 | # QT4 像素图(图像) 2 | 3 | > 原文: [https://pythonspot.com/qt4-pixmaps-images/](https://pythonspot.com/qt4-pixmaps-images/) 4 | 5 | 在本文中,我们将演示如何在 [PyQT](https://pythonspot.com/pyqt4/) 窗口中加载和显示图像。 我们可以使用像素图小部件在 [PyQT](https://pythonspot.com/pyqt4/) 窗口中显示图像。 6 | 7 | ![PyQt4-load-image](img/77d7b4598127e8b587d29da009865dde.jpg) 8 | 9 | 在 PyQt4 窗口中加载的图像。 10 | 11 | ## 介绍 12 | 13 | `Pixmap`的构造函数将图像路径作为参数: 14 | 15 | ```py 16 | pixmap = QPixmap(os.getcwd() + '/logo.png') 17 | 18 | ``` 19 | 20 | 该映像必须与程序位于同一目录中。`QPixmap`小部件支持 png 和 jpeg。 下面的示例代码。 21 | 22 | ## PyQT 在像素图中加载图像 23 | 24 | 我们像以前一样创建了一个标准的`QWidget`。 然后,在其中添加`QPixmap`小部件以加载图像。像素图贴在绘制到屏幕上的标签上。 25 | 26 | ```py 27 | import os 28 | import sys 29 | from PyQt4.QtGui import * 30 | 31 | # Create window 32 | app = QApplication(sys.argv) 33 | w = QWidget() 34 | w.setWindowTitle("PyQT4 Pixmap @ pythonspot.com ") 35 | 36 | # Create widget 37 | label = QLabel(w) 38 | pixmap = QPixmap(os.getcwd() + '/logo.png') 39 | label.setPixmap(pixmap) 40 | w.resize(pixmap.width(),pixmap.height()) 41 | 42 | # Draw window 43 | w.show() 44 | app.exec_() 45 | 46 | ``` 47 | 48 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) 49 | 50 | 结果: 51 | 52 | ![pyqt Pixmap](img/02ad7ee98094c1504dca8004682214e4.jpg) 53 | 54 | pyqt `Pixmap` -------------------------------------------------------------------------------- /docs/49.md: -------------------------------------------------------------------------------- 1 | # Flask 入门:Hello World 2 | 3 | > 原文: [https://pythonspot.com/flask-hello-world/](https://pythonspot.com/flask-hello-world/) 4 | 5 | 在本教程中,您将学习如何使用 Python 构建网络应用。 6 | 7 | 我们将使用称为 [Flask](https://pythonspot.com/python-flask-tutorials/) 的微型框架。它的核心很小,但是可以通过许多插件扩展,例如 SQLAlchemy,Babel,CouchDB,MongoDB 等。 8 | 9 | 一些 Flask 示例应用为: 10 | 11 | * [flaskr](http://flask.pocoo.org/docs/0.10/tutorial/introduction/) - 微博 12 | * [minitwit](https://github.com/mitsuhiko/flask/tree/master/examples/minitwit/) -- 一个推特克隆 13 | * [flask 网站](https://github.com/mitsuhiko/flask-website) - 静态页面+邮件列表文件 14 | 15 | ## 安装 Flask 16 | 17 | 使用以下命令安装 Flask: 18 | 19 | ```py 20 | pip install Flask 21 | 22 | ``` 23 | 24 | ## Flask Hello World 应用程序 25 | 26 | 创建一个名为`hello.py`的文件 27 | 28 | ```py 29 | 30 | from flask import Flask 31 | app = Flask(__name__) 32 | 33 | @app.route("/") 34 | def hello(): 35 | return "Hello World!" 36 | 37 | if __name__ == "__main__": 38 | app.run() 39 | 40 | ``` 41 | 42 | 最后,使用以下命令运行 Web 应用程序: 43 | 44 | ```py 45 | $ python hello.py 46 | * Running on http://localhost:5000/ 47 | 48 | ``` 49 | 50 | 在您的网络浏览器中打开 [http://localhost:5000/](http://localhost:5000/) ,然后会出现`"Hello World!"`。 51 | 52 | [下载 Flask 示例](https://pythonspot.com/download-flask-examples/) -------------------------------------------------------------------------------- /docs/24.md: -------------------------------------------------------------------------------- 1 | # 方法重载 2 | 3 | > 原文: [https://pythonspot.com/method-overloading/](https://pythonspot.com/method-overloading/) 4 | 5 | ![method overloading](img/fac89ca5c417cab74c1eae70c7d3c4b4.jpg) 6 | 7 | 几种调用方法的方法(方法重载) 8 | 9 | 在 Python 中,您可以以一种多种方式来调用它来定义方法。 10 | 11 | 给定单个方法或函数,我们可以自行指定参数数量。 12 | 13 | 根据函数定义,可以使用零个,一个,两个或多个参数来调用它。 14 | 15 | 这称为方法重载。并非所有的编程语言都支持方法重载,但是 Python 支持。 16 | 17 | ## 方法重载示例 18 | 19 | 我们使用一个方法`sayHello()`创建一个类。此方法的第一个参数设置为`None`,这使我们可以选择是否使用参数来调用它。 20 | 21 | 一个基于该类创建的对象,我们使用零和一个参数调用其方法。 22 | 23 | ```py 24 | #!/usr/bin/env python 25 | 26 | class Human: 27 | 28 | def sayHello(self, name=None): 29 | 30 | if name is not None: 31 | print('Hello ' + name) 32 | else: 33 | print('Hello ') 34 | 35 | # Create instance 36 | obj = Human() 37 | 38 | # Call the method 39 | obj.sayHello() 40 | 41 | # Call the method with a parameter 42 | obj.sayHello('Guido') 43 | 44 | ``` 45 | 46 | 输出: 47 | 48 | ```py 49 | Hello 50 | Hello Guido 51 | 52 | ``` 53 | 54 | 为了澄清方法的重载,我们现在可以通过两种方式调用`sayHello()`方法: 55 | 56 | ```py 57 | obj.sayHello() 58 | obj.sayHello('Guido') 59 | 60 | ``` 61 | 62 | 我们创建了一个方法,该方法可以使用比定义所允许的参数更少的参数进行调用。 63 | 64 | 我们不仅限于两个变量,您的方法可以有更多可选的变量。 65 | 66 | [下载练习](https://pythonspot.com/download-oop-exercises/) -------------------------------------------------------------------------------- /docs/3.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | > 原文: [https://pythonspot.com/introduction/](https://pythonspot.com/introduction/) 4 | 5 | 欢迎来到我的 Python 课程! 6 | 7 | Python 是一种通用的计算机编程语言。 8 | 本课程适用于 Python 2 和 Python 3。 9 | 10 | ## 下载 Python 11 | 12 | 要运行 Python 代码,您将需要以下程序之一: 13 | 14 | * [适用于 Windows,Mac 或 Linux 的 PyCharm](https://www.jetbrains.com/pycharm/) 15 | 16 | * [适用于 Google Android 的 QPython](https://play.google.com/store/apps/details?id=com.hipipal.qpy3) 17 | 18 | * [适用于 Apple iPhone 的 Pythonista](https://itunes.apple.com/us/app/pythonista/id528579881?mt=8) 19 | 20 | * [其他程序](https://pythonspot.com/python-ides/) 21 | 22 | 仅用于终端:[Apple Mac OS X](https://www.python.org/downloads/mac-osx/),[Microsoft Windows](https://www.python.org/downloads/windows/),[Linux/UNIX](https://www.python.org/downloads/source/) 23 | 24 | ![pycharm](img/0e5e1650a644a2fdcbb8890c2461f664.jpg) 25 | 26 | </picture> 27 | 28 | [PyCharm,流行的 Python 编辑器](https://www.jetbrains.com/pycharm/) 29 | 30 | ## 运行 Python 代码 31 | 32 | python 程序应保存为扩展名为`.py`的文件。试试这个代码: 33 | 34 | ```py 35 | print("Hello World!") 36 | print("This is a Python program.") 37 | 38 | ``` 39 | 40 | 预期产出: 41 | 42 | ```py 43 | Hello World! 44 | This is a Python program 45 | 46 | ``` 47 | 48 | 如果使用解释器,请使用: 49 | 50 | ```py 51 | python program.py 52 | 53 | ``` -------------------------------------------------------------------------------- /docs/100.md: -------------------------------------------------------------------------------- 1 | # 图像直方图 2 | 3 | > 原文: [https://pythonspot.com/image-histogram/](https://pythonspot.com/image-histogram/) 4 | 5 | 直方图收集 n 个数据,这些数据被组织到一组箱子中。每个档位都显示频率。 OpenCV 可以为彩色和灰度图像生成直方图。 您可能需要将直方图用于计算机视觉任务。 6 | 7 | ## 直方图示例 8 | 9 | 给定图像,我们可以生成蓝色,绿色和红色值的直方图。 10 | 11 | ![Histogram_Calculation](img/e03df8ccfe07cbd4e2c14160804b959b.jpg) 12 | 13 | 直方图计算 14 | 15 | 我们使用函数`cv.CalcHist(image, channel, mask, histSize, range)` 16 | 17 | 参数: 18 | 19 | * `image`:应放在方括号中,类型为`uint8`或`float32`的源图像 20 | * `channel`:要选择的颜色通道。`[0]`用于灰度。 彩色图像具有蓝色,绿色和红色通道 21 | * `mask`:如果您想要整个图像的直方图,则不适用,否则为一个区域。 22 | * `histSize`:箱数 23 | * `range`:颜色范围: 24 | 25 | 彩色图像的直方图: 26 | 27 | ```py 28 | # draw histogram in python. 29 | import cv2 30 | import numpy as np 31 | 32 | img = cv2.imread('image.jpg') 33 | h = np.zeros((300,256,3)) 34 | 35 | bins = np.arange(256).reshape(256,1) 36 | color = [ (255,0,0),(0,255,0),(0,0,255) ] 37 | 38 | for ch, col in enumerate(color): 39 | hist_item = cv2.calcHist([img],[ch],None,[256],[0,255]) 40 | cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX) 41 | hist=np.int32(np.around(hist_item)) 42 | pts = np.column_stack((bins,hist)) 43 | cv2.polylines(h,[pts],False,col) 44 | 45 | h=np.flipud(h) 46 | 47 | cv2.imshow('colorhist',h) 48 | cv2.waitKey(0) 49 | 50 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PythonSpot 中文系列教程 2 | 3 | > 原文:[PythonSpot Python Tutorials](https://pythonspot.com/) 4 | > 5 | > 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) 6 | > 7 | > 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。——David Wheeler 8 | 9 | * [在线阅读](http://pysp.apachecn.org/) 10 | * [在线阅读(Gitee)](https://apachecn.gitee.io/pythonspot-zh/) 11 | * [ApacheCN 学习资源](http://docs.apachecn.org/) 12 | 13 | ## 贡献指南 14 | 15 | 为了不断改进翻译质量,我们特此启动了【翻译、校对、笔记整理活动】,开设了多个校对项目。贡献者校对一章之后可以领取千字2\~4元的奖励。进行中的校对活动请见[活动列表](https://home.apachecn.org/#/docs/activity/docs-activity)。更多详情请联系飞龙(Q562826179,V:wizardforcel)。 16 | 17 | ## 联系方式 18 | 19 | ### 负责人 20 | 21 | * [飞龙](https://github.com/wizardforcel): 562826179 22 | 23 | ### 其他 24 | 25 | * 在我们的 [apachecn/pythonspot-zh](https://github.com/apachecn/pythonspot-zh) github 上提 issue. 26 | * 发邮件到 Email: `apachecn@163.com`. 27 | * 在我们的 [组织学习交流群](http://www.apachecn.org/organization/348.html) 中联系群主/管理员即可. 28 | 29 | ## 下载 30 | 31 | ### PYPI 32 | 33 | ``` 34 | pip install pythonspot-zh 35 | pythonspot-zh 36 | # 访问 http://localhost:{port} 查看文档 37 | ``` 38 | 39 | ### NPM 40 | 41 | ``` 42 | npm install -g pythonspot-zh 43 | pythonspot-zh 44 | # 访问 http://localhost:{port} 查看文档 45 | ``` 46 | 47 | ## 赞助我们 48 | 49 | ![](http://data.apachecn.org/img/about/donate.jpg) 50 | -------------------------------------------------------------------------------- /docs/106.md: -------------------------------------------------------------------------------- 1 | # Python 和简单文字游戏 2 | 3 | > 原文: [https://pythonspot.com/simple-text-game](https://pythonspot.com/simple-text-game) 4 | 5 | 在本文中,我们将演示如何创建一个简单的猜谜游戏。 6 | 游戏的目的是猜测正确的数字。 7 | 8 | ## 示例 9 | 10 | 下面运行示例: 11 | 12 | ![python-text-game](img/e700a43a387c917fef1acdb35ac275a0.jpg) 13 | 14 | 使用 Python 的简单文字游戏 15 | 16 | ## 随机数 17 | 18 | 将要求用户猜测随机数。 我们首先选择随机数: 19 | 20 | ```py 21 | from random import randint 22 | 23 | x = randint(1,9) 24 | 25 | ``` 26 | 27 | `randint()`函数将选择一个介于 1 到 10 之间的伪随机数。然后,我们必须继续直到找到正确的数字为止: 28 | 29 | ```py 30 | guess = -1 31 | 32 | print("Guess the number below 10:") 33 | while guess != x: 34 | guess = int(raw_input("Guess: ")) 35 | 36 | if guess != x: 37 | print("Wrong guess") 38 | else: 39 | print("Guessed correctly") 40 | 41 | ``` 42 | 43 | ## Python 猜测游戏 44 | 45 | 下面的代码开始游戏: 46 | 47 | ```py 48 | from random import randint 49 | 50 | x = randint(1,9) 51 | guess = -1 52 | 53 | print "Guess the number below 10:" 54 | while guess != x: 55 | guess = int(raw_input("Guess: ")) 56 | 57 | if guess != x: 58 | print("Wrong guess") 59 | else: 60 | print("Guessed correctly") 61 | 62 | ``` 63 | 64 | 运行示例: 65 | 66 | ```py 67 | Guess the number below 10: 68 | Guess: 3 69 | Wrong guess 70 | Guess: 6 71 | Wrong guess 72 | .. 73 | 74 | ``` -------------------------------------------------------------------------------- /docs/237.md: -------------------------------------------------------------------------------- 1 | # wxPython 输入对话框 2 | 3 | > 原文: [https://pythonspot.com/wxpython-input-dialog/](https://pythonspot.com/wxpython-input-dialog/) 4 | 5 | 输入对话框可让您的用户给您反馈或输入。 它们偶尔会出现在桌面应用程序中。 6 | 7 | wxPython 支持输入对话框,它们包含在框架中。 典型的 wxPython 对话框如下所示: 8 | 9 | ![wx input](img/38adcfbb184729e5d1d74b09ba622436.jpg) 10 | 11 | 用 wxPython 创建的输入对话框 12 | 13 | ## wxPython 输入对话框 14 | 15 | 下面的示例代码使用 wxPython 创建一个输入对话框: 16 | 17 | ```py 18 | #!/usr/bin/python 19 | 20 | import wx 21 | 22 | def onButton(event): 23 | print "Button pressed." 24 | 25 | app = wx.App() 26 | 27 | frame = wx.Frame(None, -1, 'win.py') 28 | frame.SetDimensions(0,0,200,50) 29 | 30 | # Create text input 31 | dlg = wx.TextEntryDialog(frame, 'Enter some text','Text Entry') 32 | dlg.SetValue("Default") 33 | if dlg.ShowModal() == wx.ID_OK: 34 | print('You entered: %s\n' % dlg.GetValue()) 35 | dlg.Destroy() 36 | 37 | ``` 38 | 39 | 可以使用以下函数将 [wxPython](https://pythonspot.com/wx/) 文本框添加到窗口: 40 | 41 | ```py 42 | wx.TextEntryDialog(frame, 'Enter some text','Text Entry') 43 | 44 | ``` 45 | 46 | 其中第一个参数是框架,第二个参数是标签,最后一个参数是窗口标题。 47 | 48 | 下面的函数显示对话框,并等待用户按下按钮之一: 49 | 50 | ```py 51 | dlg.ShowModal() 52 | 53 | ``` 54 | 55 | 您可以通过选择以下按钮之一来按下按钮: 56 | 57 | ```py 58 | wx.OK 59 | wx.CANCEL 60 | 61 | ``` 62 | 63 | (结果是其中之一) 64 | 65 | 给出输入后,可以使用`dlg.GetValue()`函数获取输入文本。 -------------------------------------------------------------------------------- /docs/93.md: -------------------------------------------------------------------------------- 1 | # Python 的有趣技巧 2 | 3 | > 原文: [https://pythonspot.com/fun-tricks-with-python/](https://pythonspot.com/fun-tricks-with-python/) 4 | 5 | ## 启动简单的 HTTP Web 服务器 6 | 7 | 可以在几秒钟内启动简单的 HTTP 服务器。 8 | 9 | ```py 10 | 11 | python -m SimpleHTTPServer 12 | 13 | ``` 14 | 15 | 对于 Python3: 16 | 17 | ```py 18 | 19 | python -m http.server 20 | 21 | ``` 22 | 23 | 启动后,您可以打开 [http://127.0.0.1:8000/](http://127.0.0.1:8000/)。 浏览器将向您显示目录的内容。 24 | 25 | ## 有趣的文字 26 | 27 | 尝试以下语句来显示蒂姆·彼得斯的诗。 28 | 29 | ```py 30 | import this 31 | 32 | ``` 33 | 34 | ## XKCD 网络漫画 35 | 36 | 您可以使用以下方法在 XKCD 上打开漫画: 37 | 38 | ```py 39 | import antigravity 40 | 41 | ``` 42 | 43 | ## 使用`zip`合并数组 44 | 45 | 您可以使用以下命令压缩两个数组: 46 | 47 | ```py 48 | b = [[1, 2, 3, 4], [6, 5, 4, 3]] 49 | zip(*b) 50 | [(1, 6), (2, 5), (3, 4), (4, 3)] 51 | 52 | ``` 53 | 54 | ## 反转列表 55 | 56 | 要反转列表,可以实现一个功能。 但是,如果已经实施,为什么还要麻烦解决呢? 57 | 58 | ```py 59 | b = [1,2,3,4,5] 60 | b.reverse() 61 | print b 62 | [5, 4, 3, 2, 1] 63 | 64 | ``` 65 | 66 | ## 反转字符串 67 | 68 | 可以使用以下方法来代替创建反向字符串的方法: 69 | 70 | ```py 71 | s = "Hello world" 72 | s = s[::-1] 73 | print s 74 | dlrow olleH 75 | 76 | ``` 77 | 78 | ## 交换变量 79 | 80 | 您无需定义临时变量即可交换为 Python 中的变量: 81 | 82 | ```py 83 | a = 1 84 | b = 3 85 | b,a = a,b 86 | print a 87 | print b 88 | 1 89 | 90 | ``` 91 | 92 | 如果您知道任何提示或技巧,请发表评论。 :-) -------------------------------------------------------------------------------- /docs/233.md: -------------------------------------------------------------------------------- 1 | # wxPython 窗口 2 | 3 | > 原文: [https://pythonspot.com/wxpython-window/](https://pythonspot.com/wxpython-window/) 4 | 5 | wxPython 是用于 Python 编程语言的 GUI 工具箱。 [wxPython](https://pythonspot.com/wx/) 可用于创建[图形用户界面(GUI)](https://pythonspot.com/gui)。 6 | 7 | 用 wxPython 制作的应用程序在所有平台上都有本机外观。 与具有自定义 QT 或 Tk 外观的 QT 或 Tk 不同,该应用程序将显示为本机应用程序。 它可以在所有主要的桌面平台上运行。 8 | 9 | 当前支持的操作系统是 Microsoft Windows(32 位),大多数 Unix 或类 Unix 系统以及 Macintosh OSX。 10 | 11 | wxPython 模块基于 C++ GUI 库 wxWidgets。 12 | 13 | ## wxPython 窗口 14 | 15 | 要使用 wxPython 打开窗口,请运行以下代码: 16 | 17 | ```py 18 | #!/usr/bin/python 19 | 20 | import wx 21 | app = wx.App() 22 | frame = wx.Frame(None, -1, 'win.py') 23 | frame.Show() 24 | app.MainLoop() 25 | 26 | ``` 27 | 28 | `wx.App()`行创建一个应用程序对象。 每个 [wx](https://pythonspot.com/wx/) 程序都需要具有一个`.App()`对象。 29 | 30 | `wx.Frame()`方法返回一个可以包含小部件的新窗口。 31 | 32 | `app.Mainloop()`将应用程序置于主循环中并侦听事件。 33 | 34 | ## 窗口大小和位置 35 | 36 | 您可以使用`SetDimensions()`函数设置位置和大小: 37 | 38 | ```py 39 | #!/usr/bin/python 40 | 41 | import wx 42 | 43 | app = wx.App() 44 | frame = wx.Frame(None, -1, 'win.py') 45 | frame.SetDimensions(0,0,640,480) 46 | frame.Show() 47 | app.MainLoop() 48 | 49 | ``` 50 | 51 | 该函数的参数为​​:`x`(左),`y`(上),宽度和高度。 该功能不仅可以设置屏幕分辨率,还可以设置屏幕上的位置。 52 | 53 | ## 将窗口居中 54 | 55 | 要将窗口置于屏幕调用的中心: 56 | 57 | ```py 58 | frame.Centre() 59 | 60 | ``` -------------------------------------------------------------------------------- /docs/28.md: -------------------------------------------------------------------------------- 1 | # 工厂方法 2 | 3 | > 原文: [https://pythonspot.com/factory-method/](https://pythonspot.com/factory-method/) 4 | 5 | 我们可能并不总是知道我们要预先创建什么样的对象。 6 | 在用户请求执行后,只在执行时创建某些对象。 7 | 8 | 可能使用**工厂方法**的示例: 9 | 10 | * 用户可以单击创建对象的特定按钮。 11 | 12 | * 用户可以创建几个不同类型的新文档。 13 | 14 | * 如果用户启动 Web 浏览器,则浏览器不会事先知道将打开多少个选项卡(每个选项卡都是一个对象)。 15 | 16 | ## 工厂方法模式 17 | 18 | 为了解决这个问题,我们可以使用工厂方法模式。这个想法是要有一个函数,即工厂,该函数接受一个输入字符串并输出一个对象。 19 | 20 | ```py 21 | obj = Car.factory("Racecar") 22 | obj.drive() 23 | 24 | ``` 25 | 26 | **关键事实**:工厂方法返回(新)对象。 27 | 28 | 对象的类型取决于您指定的输入字符串的类型。 这种技术还可以使您的程序更容易扩展。 新的程序员可以通过添加新的字符串和类来轻松添加功能,而无需阅读所有源代码。 29 | 30 | ## 工厂方法示例 31 | 32 | 下面的示例演示了工厂方法。工厂方法(命名为`factory`)将根据输入返回这两种类型的新对象。 33 | 34 | ```py 35 | 36 | class Car(object): 37 | 38 | def factory(type): 39 | if type == "Racecar": 40 | return Racecar() 41 | if type == "Van": 42 | return Van() 43 | 44 | factory = staticmethod(factory) 45 | 46 | class Racecar(Car): 47 | def drive(self): 48 | print("Racecar driving.") 49 | 50 | class Van(Car): 51 | def drive(self): 52 | print("Van driving.") 53 | 54 | # Create object using factory. 55 | obj = Car.factory("Racecar") 56 | obj.drive() 57 | 58 | ``` 59 | 60 | 输出: 61 | 62 | ```py 63 | Racecar driving. 64 | 65 | ``` 66 | 67 | [下载练习](https://pythonspot.com/download-oop-exercises/) -------------------------------------------------------------------------------- /asset/docsify-quick-page.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var prevBtn = document.createElement("div") 3 | prevBtn.id = "prev-page-button" 4 | document.body.appendChild(prevBtn) 5 | var nextBtn = document.createElement("div"); 6 | nextBtn.id = "next-page-button" 7 | document.body.appendChild(nextBtn) 8 | 9 | var links = null 10 | var linkMap = null 11 | var getCurIdx = function() { 12 | if (!links) { 13 | links = Array 14 | .from(document.querySelectorAll(".sidebar-nav a")) 15 | .map(x => x.href) 16 | linkMap = {} 17 | links.forEach((x, i) => linkMap[x] = i) 18 | } 19 | 20 | var elem = document.querySelector(".active a") 21 | var curIdx = elem? linkMap[elem.href]: -1 22 | return curIdx 23 | } 24 | 25 | prevBtn.addEventListener('click', function () { 26 | if (!document.body.classList.contains('ready')) 27 | return 28 | var curIdx = getCurIdx() 29 | location.href = curIdx == -1? 30 | links[0]: 31 | links[(curIdx - 1 + links.length) % links.length] 32 | document.body.scrollIntoView() 33 | }, false) 34 | 35 | nextBtn.addEventListener('click', function () { 36 | if (!document.body.classList.contains('ready')) 37 | return 38 | var curIdx = getCurIdx() 39 | location.href = links[(curIdx + 1) % links.length] 40 | document.body.scrollIntoView() 41 | }, false) 42 | }) -------------------------------------------------------------------------------- /docs/67.md: -------------------------------------------------------------------------------- 1 | # PyQT4 教程 2 | 3 | > 原文: [https://pythonspot.com/pyqt4/](https://pythonspot.com/pyqt4/) 4 | 5 | PyQt 被广泛用于开发可在各种操作系统上运行的图形界面。 它是 Python 编程中最受欢迎的 GUI 选择之一。 6 | 7 | * [使用 PyQt5 创建 GUI 应用](https://gum.co/pysqtsamples) 8 | 9 | ## 文章 10 | 11 | 您可以在下面找到 PyQT 文章的集合。 12 | 13 | ![QT_Designer](img/c001705e2cbb8d9befa1f91127a880e3.jpg) 14 | 15 | 可以使用 QT Designer 设计应用程序 16 | 17 | * [QT4 窗口](https://pythonspot.com/qt4-window/ "QT4 Window") 18 | * [QT4 按钮](https://pythonspot.com/qt4-buttons/ "QT4 Buttons") 19 | * [QT4 消息框](https://pythonspot.com/qt4-messagebox/ "QT4 Messagebox") 20 | * [QT4 菜单](https://pythonspot.com/qt4-menu/ "QT4 Menu") 21 | * [QT4 小部件](https://pythonspot.com/qt4-widgets/ "QT4 Widgets") 22 | * [QT4 文本框](https://pythonspot.com/qt4-textbox-example/) 23 | * [QT4 表格](https://pythonspot.com/qt4-table/) 24 | * [QT4 标签](https://pythonspot.com/qt4-tabs/) 25 | * [QT4 进度条](https://pythonspot.com/qt4-progressbar/) 26 | * [QT4 像素图(图像)](https://pythonspot.com/qt4-pixmaps-images/) 27 | * [QT4 打开文件对话框](https://pythonspot.com/qt4-file-dialog/) 28 | * [QT4:构建应用程序(初学者教程)](https://pythonspot.com/building-an-application-gui-with-pyqt-beginners-tutorial/) 29 | * [QT4:使用设计器创建 GUI(专业教程)](https://pythonspot.com/qml-and-pyqt-creating-a-gui-tutorial/) 30 | 31 | ## 真实示例 32 | 33 | 使用 PyQt 的程序示例 34 | 35 | * Dropbox 36 | * Ninja IDE 37 | * Veusz -------------------------------------------------------------------------------- /docs/12.md: -------------------------------------------------------------------------------- 1 | # 循环:`For`循环,`while`循环 2 | 3 | > 原文: [https://pythonspot.com/loops/](https://pythonspot.com/loops/) 4 | 5 | 可以使用循环来重复代码。 代码行可以重复 N 次,其中 N 是可以手动配置的。 实际上,这意味着将重复执行代码,直到满足条件为止。 此条件通常为(`x <= N`),但这不是唯一可能的条件。 6 | 7 | Python 有 3 种循环类型:`for`循环,`while`循环和嵌套循环。 8 | 9 | ## `for`循环 10 | 11 | 我们可以使用`for`循环迭代列表 12 | 13 | ```py 14 | #!/usr/bin/python 15 | 16 | items = [ "Abby","Brenda","Cindy","Diddy" ] 17 | 18 | for item in items: 19 | print(item) 20 | 21 | ``` 22 | 23 | `for`循环的可视化: 24 | 25 | ![for loop](img/82f73ddadae94db3c7fa209585564d41.jpg) 26 | 27 | `for`循环也可以重复 N 次: 28 | 29 | ```py 30 | #!/usr/bin/python 31 | 32 | for i in range(1,10): 33 | print(i) 34 | 35 | ``` 36 | 37 | ## `While`循环 38 | 39 | 如果不确定代码应重复多少次,请使用`while`循环。例如, 40 | 41 | ```py 42 | 43 | correctNumber = 5 44 | guess = 0 45 | 46 | while guess != correctNumber: 47 | guess = int(input("Guess the number: ")) 48 | 49 | if guess != correctNumber: 50 | print('False guess') 51 | 52 | print('You guessed the correct number') 53 | 54 | ``` 55 | 56 | ## 嵌套循环 57 | 58 | 我们可以使用嵌套组合`for`循环。 如果我们要遍历`(x, y)`字段,可以使用: 59 | 60 | ```py 61 | #!/usr/bin/python 62 | 63 | for x in range(1,10): 64 | for y in range(1,10): 65 | print("(" + str(x) + "," + str(y) + ")") 66 | 67 | ``` 68 | 69 | 嵌套非常有用,但是嵌套得越深,它就会增加复杂性。 70 | 71 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/38.md: -------------------------------------------------------------------------------- 1 | # Python 树 2 | 3 | > 原文: [https://pythonspot.com/python-tree](https://pythonspot.com/python-tree) 4 | 5 | ## 介绍 6 | 7 | 在计算机科学中,树是模仿自然的数据结构。与自然界中的树不同,树数据结构是上下颠倒的:树的根在顶部。一棵树由节点组成,其连接称为边。 底部节点也称为叶节点。 一棵树可能没有循环。 8 | 9 | ![tree](img/883cefe5eed8bb91f8afda3e8466c83b.jpg) 10 | 11 | 一棵有八个节点的树。 树的根(5)在顶部。 12 | 13 | Python 没有对树的内置支持。 14 | 15 | ## 二叉树 16 | 17 | 二叉树是一种数据结构,其中每个节点最多具有两个子代(左子代和右子代)。 一棵树的根在最上面。下面的每个节点都有一个以上的节点称为父节点。我们定义一个具有`left`和`right`属性的类`Tree`。 从这个二叉树中,我们定义根(三个中的顶部)和一个左右节点。 18 | 19 | ```py 20 | #!/usr/bin/env python 21 | class Tree(object): 22 | def __init__(self): 23 | self.left = None 24 | self.right = None 25 | self.data = None 26 | 27 | root = Tree() 28 | root.data = "root" 29 | root.left = Tree() 30 | root.left.data = "left" 31 | root.right = Tree() 32 | root.right.data = "right" 33 | 34 | print(root.left.data) 35 | 36 | ``` 37 | 38 | 然后,您可以像下面这样进一步创建树: 39 | 40 | ```py 41 | #!/usr/bin/env python 42 | class Tree(object): 43 | def __init__(self): 44 | self.left = None 45 | self.right = None 46 | self.data = None 47 | 48 | root = Tree() 49 | root.data = "root" 50 | root.left = Tree() 51 | root.left.data = "left" 52 | root.right = Tree() 53 | root.right.data = "right" 54 | 55 | root.left.left = Tree() 56 | root.left.left.data = "left 2" 57 | root.left.right = Tree() 58 | root.left.right.data = "left-right" 59 | 60 | ``` -------------------------------------------------------------------------------- /docs/37.md: -------------------------------------------------------------------------------- 1 | # Python 有限状态机 2 | 3 | > 原文: [https://pythonspot.com/python-finite-state-machine/](https://pythonspot.com/python-finite-state-machine/) 4 | 5 | ## 简介 6 | 7 | **有限状态机(FSM)**是具有状态,转换,输入和输出的数学计算模型。 这台机器当时始终处于一种状态,并且可以通过转换转移到其他状态。 转换会将计算机的状态更改为另一个状态。 8 | 9 | 可以使用有限状态机对大量问题进行建模。 自动贩卖机,电梯和交通信号灯是现代生活中使用的状态机的简单示例。 高级用法是人工智能,语言解析和通信协议设计。 10 | 11 | ## 有限状态机示例 12 | 13 | 首先安装 Fysom 模块: 14 | 15 | ```py 16 | sudo pip install fysom 17 | ``` 18 | 19 | 我们可以用两个状态定义一个有限状态机(FSM):睡眠状态和唤醒状态。 要在状态之间移动,我们将定义转换`wakeup()`和`sleep()`。 20 | 21 | ![finite state machine](img/4feca70727af7a6746c9d69566f08f53.jpg) 22 | 23 | 有限状态机。状态:醒着,睡觉。转换:睡眠,醒来 24 | 25 | 例: 26 | 27 | ```py 28 | from fysom import * 29 | 30 | fsm = Fysom({'initial': 'awake', 31 | 'final': 'red', 32 | 'events': [ 33 | {'name': 'wakeup', 'src': 'sleeping', 'dst': 'awake'}, 34 | {'name': 'sleep', 'src': 'awake', 'dst': 'sleeping'}]}) 35 | 36 | print(fsm.current) # awake 37 | fsm.sleep() 38 | print(fsm.current) # sleeping 39 | fsm.wakeup() 40 | print(fsm.current) # awake 41 | 42 | ``` 43 | 44 | 结果: 45 | 46 | ```py 47 | 48 | awake 49 | sleeping 50 | awake 51 | 52 | ``` 53 | 54 | ## 有限状态机 55 | 56 | Python 中有几种有限状态机的实现: 57 | 58 | * [Fysom](https://github.com/oxplot/fysom) 59 | * [PythonBits fsm](https://github.com/smontanaro/python-bits/blob/master/fsm.py) 60 | * [Fsme](http://fsme.sourceforge.net/) -------------------------------------------------------------------------------- /docs/8.md: -------------------------------------------------------------------------------- 1 | # `if`语句 2 | 3 | > 原文: [https://pythonspot.com/if-statements/](https://pythonspot.com/if-statements/) 4 | 5 | 在 Python 中,您可以定义条件语句,称为`if`语句。如果满足某些条件,则将执行代码块。 6 | 7 | ## `if`语句 8 | 9 | 考虑这个应用程序,它根据`x`的值执行第一或第二个代码。 10 | 11 | ```py 12 | 13 | #!/usr/bin/python 14 | 15 | x = 3 16 | if x > 10: 17 | print("x smaller than 10") 18 | else: 19 | print("x is bigger than 10 or equal") 20 | 21 | ``` 22 | 23 | 如果将`x`设置为大于 10,它将执行第二个代码块。 我们使用缩进(4 个空格)定义块。 24 | 25 | ## 一个小游戏: 26 | 27 | 用户可能并不总是定义变量,请考虑以下小游戏: 28 | 29 | ```py 30 | age = 24 31 | 32 | print "Guess my age, you have 1 chances!" 33 | guess = int(raw_input("Guess: ")) 34 | 35 | if guess != age: 36 | print("Wrong!") 37 | else: 38 | print("Correct") 39 | 40 | ``` 41 | 42 | ## 条件运算符 43 | 44 | 关于条件运算符 45 | 46 | 不要将赋值运算符(`=`)与相等运算符(`==`)混淆。 47 | 48 | ## 嵌套 49 | 50 | 执行多个条件的最直接的方法是嵌套: 51 | 52 | | **运算符** | **说明** | 53 | | --- | --- | 54 | | `!=` | 不等 | 55 | | `==` | 等于 | 56 | | `>` | 大于 | 57 | | `<` | 小于 | 58 | 59 | ```py 60 | a = 12 61 | b = 33 62 | 63 | if a > 10: 64 | if b > 20: 65 | print("Good") 66 | 67 | ``` 68 | 69 | 考虑结合 4 或 6 个条件,这可能很快变得难以阅读。 幸运的是,Python 有一个解决方案,我们可以使用`and`关键字组合条件。 70 | 71 | ```py 72 | guess = 24 73 | if guess > 10 and guess < 20: 74 | print("In range") 75 | else: 76 | print("Out of range") 77 | 78 | ``` 79 | 80 | 有时您可能想使用`or`运算符。 81 | 82 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/20.md: -------------------------------------------------------------------------------- 1 | # 写入文件 2 | 3 | > 原文: [https://pythonspot.com/write-file/](https://pythonspot.com/write-file/) 4 | 5 | Python 默认支持写文件,不需要特殊模块。 您可以使用`.write()`方法以及包含文本数据的参数来写入文件。 6 | 7 | 在将数据写入文件之前,请调用`open(filename, 'w')`函数,其中`filename`包含文件名或文件名的路径。 最后,别忘了关闭文件。 8 | 9 | ## 创建要写入的文件 10 | 11 | 下面的代码使用数据创建一个新文件(或覆盖)。 12 | 13 | ```py 14 | #!/usr/bin/env python 15 | 16 | # Filename to write 17 | filename = "newfile.txt" 18 | 19 | # Open the file with writing permission 20 | myfile = open(filename, 'w') 21 | 22 | # Write a line to the file 23 | myfile.write('Written with Python\n') 24 | 25 | # Close the file 26 | myfile.close() 27 | 28 | ``` 29 | 30 | `"w"`标志可使 Python 截断该文件(如果已存在)。 也就是说,如果文件内容存在,它将被替换。 31 | 32 | ## 附加到文件 33 | 34 | 如果您只想向文件添加内容,则可以使用`"a"`参数。 35 | 36 | ```py 37 | #!/usr/bin/env python 38 | 39 | # Filename to append 40 | filename = "newfile.txt" 41 | 42 | # The 'a' flag tells Python to keep the file contents 43 | # and append (add line) at the end of the file. 44 | myfile = open(filename, 'a') 45 | 46 | # Add the line 47 | myfile.write('Written with Python\n') 48 | 49 | # Close the file 50 | myfile.close() 51 | 52 | ``` 53 | 54 | ## 参数 55 | 56 | 参数总结: 57 | 58 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) 59 | 60 | | 标志 | 行为 | 61 | | --- | --- | 62 | | `r` | 打开文件以供读取 | 63 | | `w` | 打开文件进行写入(将截断文件) | 64 | | `b` | 二进制更多 | 65 | | `r+` | 打开文件进行读写 | 66 | | `a+` | 打开文件进行读写(附加到结尾) | 67 | | `w+` | 打开文件进行读写(截断文件) | -------------------------------------------------------------------------------- /docs/6.md: -------------------------------------------------------------------------------- 1 | # Python 变量 2 | 3 | > 原文: [https://pythonspot.com/python-variables/](https://pythonspot.com/python-variables/) 4 | 5 | ![python-variables](img/6f6aa6594bc5ce80d77b48a2abe7c75e.jpg) 6 | 7 | Python 中的变量(`x`,`y`,`z`)。它们可以稍后在程序中使用 8 | 9 | 变量可以保存您可以使用一次或多次的数字。 10 | 11 | 数字可以是以下数据类型之一: 12 | 13 | * 整数(`1,2,3,4`) 14 | 15 | * 浮点(点后面的数字) 16 | 17 | * 布尔值(真或假) 18 | 19 | ## 数值变量示例 20 | 21 | 数值变量示例: 22 | 23 | ```py 24 | x = 1 25 | y = 1.234 26 | z = True 27 | 28 | ``` 29 | 30 | 您可以使用`print()`函数将它们输出到屏幕上。 31 | 32 | ```py 33 | x = 1 34 | y = 1.234 35 | z = True 36 | 37 | print(x) 38 | print(y) 39 | print(z) 40 | 41 | ``` 42 | 43 | Python 支持算术运算,例如加法(`+`),乘法(`*`),除法(`/`)和减法(`-`)。 44 | 45 | ```py 46 | #!/usr/bin/env python 47 | 48 | x = 3 49 | y = 8 50 | 51 | sum = x + y 52 | 53 | print(sum) 54 | 55 | ``` 56 | 57 | [更多数学运算](https://pythonspot.com/math-operations/) 58 | 59 | ## 用户输入 60 | 61 | ## Python 3 62 | 63 | 使用`input()`函数获取文本输入,使用`int()`或`float()`转换为数字。 64 | 65 | ```py 66 | #!/usr/bin/env python 67 | 68 | x = int(input("Enter x:")) 69 | y = int(input("Enter y:")) 70 | 71 | sum = x + y 72 | print(sum) 73 | 74 | ``` 75 | 76 | ## Python 2 (旧版本) 77 | 78 | 您也可以使用`raw_input`函数要求用户输入: 79 | 80 | ```py 81 | #!/usr/bin/env python 82 | 83 | x = int(raw_input("Enter x:")) 84 | y = int(raw_input("Enter y:")) 85 | 86 | sum = x + y 87 | print(sum) 88 | 89 | ``` 90 | 91 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/217.md: -------------------------------------------------------------------------------- 1 | # PyQt4 的菜单 2 | 3 | > 原文: [https://pythonspot.com/qt4-menu/](https://pythonspot.com/qt4-menu/) 4 | 5 | ![PyQT Menu pythonspot](img/08595a6340da7b1792993a5bb8fb5912.jpg) 6 | 7 | PyQT 菜单 8 | 9 | [**PyQt4**](https://pythonspot.com/pyqt4/) **菜单**出现在窗口栏的顶部。 **菜单**使用户可以控制应用程序,并且通常位于窗口顶部。 10 | 11 | `QMainWindow`类创建主应用程序窗口。 此类具有一个名为`menuBar()`的方法,该方法添加标题栏。 12 | 13 | 可以使用`addMenu()`将菜单添加到标题栏。 在每个菜单内,您都可以使用`addAction`方法添加命令。 14 | 15 | ## PyQt4 菜单栏 16 | 17 | 此代码将为您的 qt4 应用添加菜单: 18 | 19 | ```py 20 | #! /usr/bin/env python 21 | # -*- coding: utf-8 -*- 22 | # 23 | import sys 24 | from PyQt4.QtGui import * 25 | 26 | # Create an PyQT4 application object. 27 | a = QApplication(sys.argv) 28 | 29 | # The QWidget widget is the base class of all user interface objects in PyQt4. 30 | w = QMainWindow() 31 | 32 | # Set window size. 33 | w.resize(320, 240) 34 | 35 | # Set window title 36 | w.setWindowTitle("Hello World!") 37 | 38 | # Create main menu 39 | mainMenu = w.menuBar() 40 | mainMenu.setNativeMenuBar(False) 41 | fileMenu = mainMenu.addMenu('&File') 42 | 43 | # Add exit button 44 | exitButton = QAction(QIcon('exit24.png'), 'Exit', w) 45 | exitButton.setShortcut('Ctrl+Q') 46 | exitButton.setStatusTip('Exit application') 47 | exitButton.triggered.connect(w.close) 48 | fileMenu.addAction(exitButton) 49 | 50 | # Show window 51 | w.show() 52 | 53 | sys.exit(a.exec_()) 54 | 55 | ``` 56 | 57 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/224.md: -------------------------------------------------------------------------------- 1 | # QT4 文件对话框 2 | 3 | > 原文: [https://pythonspot.com/qt4-file-dialog/](https://pythonspot.com/qt4-file-dialog/) 4 | 5 | 在这个简短的教程中,您将学习如何创建文件对话框并加载其文件内容。 使用文件访问的许多应用程序都需要文件对话框。 6 | 7 | ## 文件对话框示例 8 | 9 | 要在 [PyQT](https://pythonspot.com/pyqt4/) 中获取文件名(而非文件数据),可以使用以下行: 10 | 11 | ```py 12 | filename = QFileDialog.getOpenFileName(w, 'Open File', '/') 13 | 14 | ``` 15 | 16 | 如果您使用的是 Microsoft Windows,请使用 17 | 18 | ```py 19 | filename = QFileDialog.getOpenFileName(w, 'Open File', 'C:\') 20 | 21 | ``` 22 | 23 | 下面的示例(包括加载文件数据): 24 | 25 | ```py 26 | #! /usr/bin/env python 27 | # -*- coding: utf-8 -*- 28 | # 29 | import sys 30 | from PyQt4.QtGui import * 31 | 32 | # Create an PyQT4 application object. 33 | a = QApplication(sys.argv) 34 | 35 | # The QWidget widget is the base class of all user interface objects in PyQt4. 36 | w = QWidget() 37 | 38 | # Set window size. 39 | w.resize(320, 240) 40 | 41 | # Set window title 42 | w.setWindowTitle("Hello World!") 43 | 44 | # Get filename using QFileDialog 45 | filename = QFileDialog.getOpenFileName(w, 'Open File', '/') 46 | print(filename) 47 | 48 | # print file contents 49 | with open(filename, 'r') as f: 50 | print(f.read()) 51 | 52 | # Show window 53 | w.show() 54 | 55 | sys.exit(a.exec_()) 56 | 57 | ``` 58 | 59 | 结果(输出可能因您的操作系统而异): 60 | 61 | ![pyqt_file_open](img/a6f06b37951c44452f79efd047298429.jpg) 62 | 63 | PyQt 文件打开对话框 64 | 65 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/87.md: -------------------------------------------------------------------------------- 1 | # Matplotlib 更新绘图 2 | 3 | > 原文: [https://pythonspot.com/matplotlib-update-plot/](https://pythonspot.com/matplotlib-update-plot/) 4 | 5 | 更新 [**matplotlib**](https://pythonspot.com/matplotlib/) 绘图非常简单。 创建数据,绘图并循环更新。 6 | 7 | 启用交互模式至关重要:`plt.ion()`。 这控制是否通过每个`draw()`命令重绘图形。 如果它为`False`(默认值),则该图不会自动更新。 8 | 9 | ## 更新绘图示例 10 | 11 | 复制下面的代码以测试交互式绘图。 12 | 13 | ```py 14 | 15 | import matplotlib.pyplot as plt 16 | import numpy as np 17 | 18 | x = np.linspace(0, 10*np.pi, 100) 19 | y = np.sin(x) 20 | 21 | plt.ion() 22 | fig = plt.figure() 23 | ax = fig.add_subplot(111) 24 | line1, = ax.plot(x, y, 'b-') 25 | 26 | for phase in np.linspace(0, 10*np.pi, 100): 27 | line1.set_ydata(np.sin(0.5 * x + phase)) 28 | fig.canvas.draw() 29 | 30 | ``` 31 | 32 | ![matplotlib-update](img/a27d316530f4f9a8d71898076641b9ef.jpg) 33 | 34 | Capture of a frame of the program above 35 | 36 | ## 说明 37 | 38 | 我们使用以下方法创建要绘制的数据: 39 | 40 | ```py 41 | 42 | x = np.linspace(0, 10*np.pi, 100) 43 | y = np.sin(x) 44 | 45 | ``` 46 | 47 | 使用以下命令打开交互模式: 48 | 49 | ```py 50 | 51 | plt.ion() 52 | 53 | ``` 54 | 55 | 配置图(`"b-"`表示蓝线): 56 | 57 | ```py 58 | 59 | fig = plt.figure() 60 | ax = fig.add_subplot(111) 61 | line1, = ax.plot(x, y, 'b-') 62 | 63 | ``` 64 | 65 | 最后循环更新: 66 | 67 | ```py 68 | 69 | for phase in np.linspace(0, 10*np.pi, 100): 70 | line1.set_ydata(np.sin(0.5 * x + phase)) 71 | fig.canvas.draw() 72 | 73 | ``` 74 | 75 | [下载示例](https://pythonspot.com/download-matplotlib-examples/) -------------------------------------------------------------------------------- /docs/13.md: -------------------------------------------------------------------------------- 1 | # Python 范围 2 | 3 | > 原文: [https://pythonspot.com/python-range/](https://pythonspot.com/python-range/) 4 | 5 | `range()`函数会生成一个数字序列,从下限到上限。 6 | 7 | ```py 8 | 9 | range(lower_bound, upper_bound, step_size) 10 | 11 | ``` 12 | 13 | * `lower_bound`:列表的起始值。 14 | 15 | * `upper_bound`:列表的最大值,不包括此数字。 16 | 17 | * `step_bound`:步长,列表中每个数字之间的差。 18 | 19 | `lower_bound`和`step_size`参数是可选的。默认情况下,下限设置为零,增量步长设置为一。参数必须为整数类型,但可以为负。 20 | 21 | ![python range](img/e67c0c741c049ebf8163523793792e9e8d0.jpg) 22 | 23 | 解释器中的 python `range`函数 24 | 25 | ## 范围实现差异 26 | 27 | 通常是一个问题。 在 Python 版本中,`range()`的实现略有不同: 28 | 29 | * Python 2.x:`range()`函数返回一个列表。 30 | 31 | * Python 3.x:`range()`函数生成一个序列。 32 | 33 | ## python 2.7 中的范围 34 | 35 | 调用`range(5)`将返回:`0, 1, 2, 3, 4`。 36 | 37 | ```py 38 | 39 | >>> range(5) 40 | 41 | ``` 42 | 43 | 调用`range(1, 10)`返回:`1,2,3,4,5,6,7,8,9` 44 | 45 | ```py 46 | 47 | >>> range(1,10) 48 | 49 | ``` 50 | 51 | 调用`range(0, 10, 2)`返回:`0,2,4,6,8` 52 | 53 | ```py 54 | 55 | >>> range(0,10,2) 56 | 57 | ``` 58 | 59 | python 3 中的**范围**。要使用范围生成列表,请添加列表函数。 60 | 61 | ```py 62 | 63 | >>> list(range(5)) 64 | 65 | ``` 66 | 67 | 我们可以使用所有参数(下限,上限,步长) 68 | 69 | ```py 70 | 71 | >>> list(range(0,10,2)) 72 | [0, 2, 4, 6, 8] 73 | 74 | ``` 75 | 76 | ## python 2 实现 77 | 78 | 此版本的`range()`分配计算机内存,并在后台填充计算机内存。 对于大范围,这不是很有效的实现。 79 | 80 | 通常,`range`的 Python2 实现不会有任何问题,但如果使用大量(数百万个项目),则可能会遇到问题。 81 | 82 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/57.md: -------------------------------------------------------------------------------- 1 | # Flask 和静态 html 文件 2 | 3 | > 原文: [https://pythonspot.com/flask-with-static-html-files/](https://pythonspot.com/flask-with-static-html-files/) 4 | 5 | 您可以使用 Flask 框架并一起使用静态文件。 6 | 7 | Flask 将为您提供 URL 路由,许多功能以及所有 Python 好处。 8 | 9 | 您可能需要一个部分动态和部分静态的应用程序。 或者,您可能只想使用 URL 路由进行浏览。 在本文中,我们将教您如何使用 Flask 加载静态 HTML 文件。 10 | 11 | 12 | ```py 13 | from flask import Flask, render_template 14 | 15 | app = Flask(__name__) 16 | 17 | @app.route('//') 18 | def render_static(page_name): 19 | return render_template('%s.html' % page_name) 20 | 21 | if __name__ == '__main__': 22 | app.run() 23 | 24 | ``` 25 | 26 | 该应用程序使用以下方法初始化 Flask 应用程序: 27 | 28 | ```py 29 | 30 | app.run() 31 | 32 | ``` 33 | 34 | 该应用程序为任何可能的页面创建 URL 路由,并使用以下链接将其链接到静态 html 文件: 35 | 36 | ```py 37 | 38 | @app.route('//') 39 | def render_static(page_name): 40 | return render_template('%s.html' % page_name) 41 | 42 | ``` 43 | 44 | `//` 45 | 46 | 创建目录`/templates/`并添加文件`hello.html`: 47 | 48 | ```py 49 | 50 | Hello World Template 51 | 52 | Hello World 53 | 54 | ``` 55 | 56 | 使用以下命令启动服务器: 57 | 58 | ```py 59 | $ python app.py 60 | * Running on http://127.0.0.1:5000/ 61 | 62 | ``` 63 | 64 | 然后,可以使用 URL 路由访问任何`.html`文件。 65 | 66 | 例如,可以使用 [http://127.0.0.1:5000/hello](http://127.0.0.1:5000/hello) 访问静态文件`hello.html`。 您可以将任何 css 文件存储在`/static/`目录中。 67 | 68 | [下载 Flask 示例](https://pythonspot.com/download-flask-examples/) -------------------------------------------------------------------------------- /docs/10.md: -------------------------------------------------------------------------------- 1 | # 全局和局部变量 2 | 3 | > 原文: [https://pythonspot.com/global-local-variables/](https://pythonspot.com/global-local-variables/) 4 | 5 | 变量有两种类型:**全局变量**和**局部变量**。全局变量可以在代码中的任何位置访问,局部变量只能在[作用域](https://pythonspot.com/scope/)中访问。 6 | 7 | ![global-local-variable](img/b096b6df86baa4af3f1d9b86a8b57af2.jpg) 8 | 9 | 可以在代码中的任何位置访问和修改**全局变量**(`x`),**局部变量**(`z`)仅存在于块 3 中。 10 | 11 | ## 局部变量 12 | 13 | 局部变量只能在其作用域内达到。下面的示例有两个局部变量:`x`和`y`。 14 | 15 | ```py 16 | 17 | def sum(x,y): 18 | sum = x + y 19 | return sum 20 | 21 | print(sum(8,6)) 22 | 23 | ``` 24 | 25 | 变量`x`和`y`只能在函数`sum`之内使用,而在函数外部则不存在。局部变量不能在其作用域之外使用,此行将不起作用: 26 | 27 | ```py 28 | 29 | print(x) 30 | 31 | ``` 32 | 33 | ## 全局变量 34 | 35 | 全局变量可以在代码中的任何位置使用。在下面的示例中,我们定义了全局变量`z` 36 | 37 | ```py 38 | 39 | z = 10 40 | 41 | def afunction(): 42 | global z 43 | print(z) 44 | 45 | afunction() 46 | print(z) 47 | 48 | ``` 49 | 50 | 全局变量`z`可以在整个程序中,函数内部或外部使用。可以在函数内部修改全局变量,并为整个程序进行更改: 51 | 52 | ```py 53 | 54 | z = 10 55 | 56 | def afunction(): 57 | global z 58 | z = 9 59 | 60 | afunction() 61 | print(z) 62 | 63 | ``` 64 | 65 | 调用`afunction()`之后,将更改整个程序的全局变量。 66 | 67 | ## 练习 68 | 69 | 局部变量和全局变量可以在同一程序中一起使用。尝试确定该程序的输出: 70 | 71 | ```py 72 | 73 | z = 10 74 | 75 | def func1(): 76 | global z 77 | z = 3 78 | 79 | def func2(x,y): 80 | global z 81 | return x+y+z 82 | 83 | func1() 84 | total = func2(4,5) 85 | print(total) 86 | 87 | ``` 88 | 89 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/88.md: -------------------------------------------------------------------------------- 1 | # 使用 matplotlib 绘制时间 2 | 3 | > 原文: [https://pythonspot.com/plot-time-with-matplotlib/](https://pythonspot.com/plot-time-with-matplotlib/) 4 | 5 | Matplotlib 支持在水平(`x`)轴上带有时间的图。 数据值将放在垂直(`y`)轴上。 在本文中,我们将通过一些示例进行演示。 6 | 7 | 需要使用 Python `datetime`模块(标准模块)。 8 | 9 | ## 绘制时间 10 | 11 | 您可以使用时间戳绘制时间: 12 | 13 | ```py 14 | 15 | import matplotlib 16 | import matplotlib.pyplot as plt 17 | import numpy as np 18 | import datetime 19 | 20 | # create data 21 | y = [ 2,4,6,8,10,12,14,16,18,20 ] 22 | x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(len(y))] 23 | 24 | # plot 25 | plt.plot(x,y) 26 | plt.gcf().autofmt_xdate() 27 | plt.show() 28 | 29 | ``` 30 | 31 | ![matplotilb-time](img/35ae64518583e605bb57af58666ccecd.jpg) 32 | 33 | 如果要更改间隔,请使用以下几行之一: 34 | 35 | ```py 36 | 37 | # minutes 38 | x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(len(y))] 39 | 40 | ``` 41 | 42 | ## 从特定小时/分钟开始的时间图 43 | 44 | 45 | 要从特定日期开始,请使用`datetime.datetime(year, month, day, hour, minute)`创建新的时间戳。 46 | 47 | 完整示例: 48 | 49 | ```py 50 | 51 | import matplotlib 52 | import matplotlib.pyplot as plt 53 | import numpy as np 54 | import datetime 55 | 56 | # create data 57 | customdate = datetime.datetime(2016, 1, 1, 13, 30) 58 | y = [ 2,4,6,8,10,12,14,16,18,20 ] 59 | x = [customdate + datetime.timedelta(hours=i) for i in range(len(y))] 60 | 61 | # plot 62 | plt.plot(x,y) 63 | plt.gcf().autofmt_xdate() 64 | plt.show() 65 | 66 | ``` 67 | 68 | [下载示例](https://pythonspot.com/download-matplotlib-examples/) -------------------------------------------------------------------------------- /docs/236.md: -------------------------------------------------------------------------------- 1 | # wxPython 文件对话框 2 | 3 | > 原文: [https://pythonspot.com/wxpython-file-dialog/](https://pythonspot.com/wxpython-file-dialog/) 4 | 5 | 几乎每个可以打开一个或多个文件的桌面应用程序都有一个文件对话框。 6 | 7 | 创建一个打开的文件对话框似乎是一个非常复杂的窗口:它包含按钮,位置,标签和许多其他小部件。 而且,此打开文件对话框的外观在每个平台上都不同:Mac OS,Windows 等。 8 | 9 | 在 wxPython 的模块配备了开放式的文件对话框,可以用几个函数的调用来创建。 10 | 11 | ![wxPythonOpenFile](img/1d17f5d6e0c394ba2f1d574baf74c7b0.jpg) 12 | 13 | [wxPython](https://pythonspot.com/wx/) 文件打开对话框 14 | 15 | ## wxPython 文件对话框 16 | 17 | 下面的示例使用 wxPython 创建一个具有本机外观的文件对话框: 18 | 19 | ```py 20 | #!/usr/bin/python 21 | 22 | import wx 23 | 24 | def onButton(event): 25 | print "Button pressed." 26 | 27 | app = wx.App() 28 | 29 | frame = wx.Frame(None, -1, 'win.py') 30 | frame.SetDimensions(0,0,200,50) 31 | 32 | # Create open file dialog 33 | openFileDialog = wx.FileDialog(frame, "Open", "", "", 34 | "Python files (*.py)|*.py", 35 | wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) 36 | 37 | openFileDialog.ShowModal() 38 | print(openFileDialog.GetPath()) 39 | openFileDialog.Destroy() 40 | 41 | ``` 42 | 43 | 要使用 [wxPython](https://pythonspot.com/wx/) 创建文件对话框,我们可以简单地调用`wx.FileDialog()`。 此方法的定义是:`(parent, messgae, defaultDir, defaultFile, pattern, style, pos)`。我们用以下参数调用此方法: 44 | 45 | ```py 46 | wx.FileDialog(frame, "Open", "", "","Python files (*.py)|*.py",wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) 47 | 48 | ``` 49 | 50 | (未指定默认目录或默认文件)。 51 | 52 | `showModal()`方法显示窗口: 53 | 54 | ```py 55 | openFileDialog.ShowModal() 56 | 57 | ``` 58 | 59 | 如果选择一个,则命令`openFileDialog.GetPath()`返回文件的完整路径。 -------------------------------------------------------------------------------- /docs/84.md: -------------------------------------------------------------------------------- 1 | # Matplotlib 饼图 2 | 3 | > 原文: [https://pythonspot.com/matplotlib-pie-chart/](https://pythonspot.com/matplotlib-pie-chart/) 4 | 5 | [Matplotlib](https://pythonspot.com/matplotlib/) 使用`pie()`函数支持饼图。 您可能喜欢 [Matplotlib 图库](https://pythonspot.com/matplotlib-gallery/)。 6 | 7 | ## Matplotlib 饼图 8 | 9 | 下面的代码创建一个饼图: 10 | 11 | ```py 12 | import matplotlib.pyplot as plt 13 | 14 | # Data to plot 15 | labels = 'Python', 'C++', 'Ruby', 'Java' 16 | sizes = [215, 130, 245, 210] 17 | colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'] 18 | explode = (0.1, 0, 0, 0) # explode 1st slice 19 | 20 | # Plot 21 | plt.pie(sizes, explode=explode, labels=labels, colors=colors, 22 | autopct='%1.1f%%', shadow=True, startangle=140) 23 | 24 | plt.axis('equal') 25 | plt.show() 26 | 27 | ``` 28 | 29 | 输出: 30 | 31 | ![pie chart python](img/8a804a5303e6f2a4f62d47582241129b.jpg) 32 | 33 | python 饼图 34 | 35 | 要添加图例,请使用`plt.legend()`函数: 36 | 37 | ```py 38 | import matplotlib.pyplot as plt 39 | 40 | labels = ['Cookies', 'Jellybean', 'Milkshake', 'Cheesecake'] 41 | sizes = [38.4, 40.6, 20.7, 10.3] 42 | colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral'] 43 | patches, texts = plt.pie(sizes, colors=colors, shadow=True, startangle=90) 44 | plt.legend(patches, labels, loc="best") 45 | plt.axis('equal') 46 | plt.tight_layout() 47 | plt.show() 48 | 49 | ``` 50 | 51 | 输出: 52 | 53 | ![python pie chart](img/9036abd8c344a4a541cfb80139d9e0d3.jpg) 54 | 55 | python 饼图 56 | 57 | [下载所有 Matplotlib 示例](https://pythonspot.com/download-matplotlib-examples/) -------------------------------------------------------------------------------- /docs/27.md: -------------------------------------------------------------------------------- 1 | # 内部类 2 | 3 | > 原文: [https://pythonspot.com/inner-classes](https://pythonspot.com/inner-classes) 4 | 5 | **内部类**或**嵌套类**完全是在另一个类的主体内定义的。 如果使用类创建对象,则可以使用根类内的对象。 一个类可以具有多个内部类,但是通常避免使用内部类。 6 | 7 | ## 内部类的例子 8 | 9 | 我们创建一个具有一个内部类(`Head`)的类(`Human`)。创建一个实例,该实例调用内部类中的方法: 10 | 11 | ```py 12 | #!/usr/bin/env python 13 | 14 | class Human: 15 | 16 | def __init__(self): 17 | self.name = 'Guido' 18 | self.head = self.Head() 19 | 20 | class Head: 21 | def talk(self): 22 | return 'talking...' 23 | 24 | if __name__ == '__main__': 25 | guido = Human() 26 | print guido.name 27 | print guido.head.talk() 28 | 29 | ``` 30 | 31 | 输出: 32 | 33 | ```py 34 | Guido 35 | talking... 36 | 37 | ``` 38 | 39 | 在上面的程序中,我们有内部类`Head()`,它具有自己的方法。内部类可以同时具有方法和变量。在此示例中,类`Human`的构造函数(`__init__`)创建了一个新的`head`对象。 40 | 41 | ## 多个内部类 42 | 43 | 您绝不限于内部类的数量,例如,以下代码也可以使用: 44 | 45 | ```py 46 | #!/usr/bin/env python 47 | 48 | class Human: 49 | 50 | def __init__(self): 51 | self.name = 'Guido' 52 | self.head = self.Head() 53 | self.brain = self.Brain() 54 | 55 | class Head: 56 | def talk(self): 57 | return 'talking...' 58 | 59 | class Brain: 60 | def think(self): 61 | return 'thinking...' 62 | 63 | if __name__ == '__main__': 64 | guido = Human() 65 | print(guido.name) 66 | print(guido.head.talk()) 67 | print(guido.brain.think()) 68 | 69 | ``` 70 | 71 | 通过使用内部类,您可以使代码更加面向对象。 一个对象可以容纳多个子对象。 我们可以使用它们为程序添加更多结构。 72 | 73 | [下载练习](https://pythonspot.com/download-oop-exercises/) -------------------------------------------------------------------------------- /docs/97.md: -------------------------------------------------------------------------------- 1 | # 使用 QPython 在 Python 中进行 Android 开发 2 | 3 | > 原文: [https://pythonspot.com/android-development-in-python-with-qpython/](https://pythonspot.com/android-development-in-python-with-qpython/) 4 | 5 | QPython 是一个脚本引擎,可让您在 **Android** 上运行 **Python** 脚本。 如果要制作 **Android** 应用,请改用 Kivy。 6 | 7 | ## QPython 8 | 9 | QPython 应用包含: 10 | 11 | * Android 上的 Python 编程 12 | 13 | * 运行脚本/项目 14 | 15 | * Android 上的 IDE 16 | 17 | * 点(包管理器) 18 | 19 | * [**SL4A**](https://pythonspot.com/sl4a-android-python-scripting/) 用于 Android 访问(GPS,网络,蓝牙等) 20 | 21 | 请注意,QPython 是脚本引擎,类似于 [SL4A](https://pythonspot.com/sl4a-android-python-scripting/),而不是应用程序开发平台。 22 | 23 | ## 安装 24 | 25 | 在 Google Play 商店中,您可以找到 QPython(Python 2.7.2)和 QPython3(Python 3.2.2)。 我们建议您使用 Python 3.2.2,但出于传统原因,您可能希望使用 Python 2.7.2。 26 | 27 | ![python for android](img/20a813e45236ffc17c7e9ca8670e3960.jpg) 28 | 29 | Android 上的 Python 30 | 31 | ## 用法 32 | 33 | 安装后,您将进入一个标志性菜单。 第一个图标将打开 Python 解释器。 34 | 35 | ![qpython-menu](img/6ac783bbfde215c4acea8b0c79576f88.jpg) 36 | 37 | qpython-menu 38 | 39 | ## 集成开发环境 40 | 41 | 第二个图标(编辑器)将启动 Python IDE。 它具有语法突出显示和其他一些功能。 虽然在 Android 设备上安装 IDE 很有用,但在手机或平板电脑上打字可能不是您的首选。所有脚本都存储在`/storage/emulated/0/com.hipipal.qpyplus/scripts`中。您可以从桌面上喜欢的编辑器直接上传到此目录。(运行按钮在底部。) 42 | 43 | ![qpython-ide](img/1c9f3ba2c9aff9589eaa99e46af4ce6a.jpg) 44 | 45 | QPython IDE 46 | 47 | ## 解释器 48 | 49 | 您可以直接在 Android 设备上使用 Python 解释器。这类似于在 Windows 或 Linux 上启动 Python 解释器。虽然有时有用,但您可能更喜欢使用 IDE。 50 | 51 | ![python-interpreter](img/a2027e0feffd6a4445ba2e70bafd7e01.jpg) 52 | 53 | Android 上的 Python 解释器 -------------------------------------------------------------------------------- /docs/235.md: -------------------------------------------------------------------------------- 1 | # wxPython 对话框 2 | 3 | > 原文: [https://pythonspot.com/wxpython-dialogs/](https://pythonspot.com/wxpython-dialogs/) 4 | 5 | 要使用[对话框](https://pythonspot.com/wx/),wxPython 仅需要几行代码。 我们将在下面演示。 我们将讨论信息对话框,简单对话框,错误对话框,警告对话框等。 6 | 7 | ## 信息对话框 8 | 9 | 信息对话框可以用一行代码显示: 10 | 11 | ```py 12 | import wx 13 | 14 | app = wx.App() 15 | wx.MessageBox('Pythonspot wxWidgets demo', 'Info', wx.OK | wx.ICON_INFORMATION) 16 | 17 | ``` 18 | 19 | 第一个参数是要显示的实际文本。 第二个是标题,最后一个参数告诉 wx 显示信息图标和按钮。 20 | 21 | 输出: 22 | 23 | ![wx dialog](img/060aff2419f3f914c11c28c7e8aad94d.jpg) 24 | 25 | wx 对话框 26 | 27 | ## 更多对话框:警告对话框,错误对话框和默认对话框 28 | 29 | 通过修改参数,您可以轻松创建其他类型的模拟日志。 下面的例子: 30 | 31 | ```py 32 | import wx 33 | 34 | app = wx.App() 35 | 36 | # simple dialog 37 | wx.MessageBox('A dialog', 'Title', wx.OK) 38 | 39 | # warning dialog 40 | wx.MessageBox('Operation could not be completed', 'Warning', wx.OK | wx.ICON_WARNING) 41 | 42 | # error dialog 43 | wx.MessageBox('Operation could not be completed', 'Error', wx.OK | wx.ICON_ERROR) 44 | 45 | ``` 46 | 47 | 输出(仅对话框之一): 48 | 49 | ![wxDialog](img/ff4ca6bf3d6ff81f610c0b9de5338c3f.jpg) 50 | 51 | wx 对话框 52 | 53 | ## 问题对话框 54 | 55 | Wx 可用于创建问题对话框(是/否)。 示例代码: 56 | 57 | ```py 58 | import wx 59 | 60 | app = wx.App() 61 | 62 | dlg = wx.MessageDialog(None, "Do you want to update?",'Updater',wx.YES_NO | wx.ICON_QUESTION) 63 | result = dlg.ShowModal() 64 | 65 | if result == wx.ID_YES: 66 | print "Yes pressed" 67 | else: 68 | print "No pressed" 69 | 70 | ``` 71 | 72 | 输出: 73 | 74 | ![wxDialog](img/7874a6d1f9758b18ee1ef3d3e4f58334.jpg) 75 | 76 | wx 对话框 77 | -------------------------------------------------------------------------------- /docs/69.md: -------------------------------------------------------------------------------- 1 | # Tkinter 2 | 3 | > 原文: [https://pythonspot.com/tkinter/](https://pythonspot.com/tkinter/) 4 | 5 | 标准 [**GUI(图形用户界面)包**](https://pythonspot.com/gui/)被称为 Tkinter。 默认情况下,它包含在 Microsoft Windows 和 Mac OS X 安装的 Python 中。 6 | 7 | 它有时被称为“Python 世界的次要传统之一”。 Tkinter 绝不是唯一的 GUI 软件包,通常使用替代的 GUI 软件包,例如 PyQT 和 wxPython。 8 | 9 | 与 PyQT 和 wxPython 相比,Tkinter 仅具有少量的小部件,例如按钮,标签,检查按钮,单选按钮,列表框,滚动框,进度条等。 10 | 11 | ![tk question](img/b968cc0aef66f5044316ef16f602586b.jpg) 12 | 13 | Tkinter 消息框,Tkinter 的小部件之一。 14 | 15 | [下载 Tkinter 示例](/download-tkinter-examples) 16 | 17 | ## 概述 18 | 19 | Tkinter 的简要介绍。 20 | 21 | * [Tk 窗口和按钮](https://pythonspot.com/tk-window-and-button/) 22 | * [Tk 菜单栏](https://pythonspot.com/tk-menubar/) 23 | * [Tk 小部件](https://pythonspot.com/tk-widgets/) 24 | * [Tk 消息框](https://pythonspot.com/tk-message-box/) 25 | * [Tk 文件对话框](https://pythonspot.com/tk-file-dialogs/) 26 | * [TKinter 问题对话框](https://pythonspot.com/tkinter-askquestion-dialog/) 27 | 28 | ## 文档 29 | 30 | 热门书籍: 31 | 32 | * [适用于繁忙的 Python 开发人员的现代 Tkinter](https://www.amazon.com/gp/product/B0071QDNLO/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B0071QDNLO&linkCode=as2&tag=pythonspot-20&linkId=a0278d9fd5d4a14198f000fe314d28fa) 33 | * [Tkinter GUI 应用程序开发蓝图](https://www.amazon.com/gp/product/1788837460/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1788837460&linkCode=as2&tag=pythonspot-20&linkId=72aba5f08a69779e07184eca8937de38) 34 | 35 | Tkinter 视频课程: 36 | 37 | * [带有 Tkinter 的 Python 桌面应用](https://gum.co/ErLc) 38 | 39 | **注意**:在 Python 3.x 中,该程序包名为`tkinter`。 为 Python 2.x 编写的程序可能正在导入 Tkinter。 -------------------------------------------------------------------------------- /docs/214.md: -------------------------------------------------------------------------------- 1 | # Qt4 窗口 2 | 3 | > 原文: [https://pythonspot.com/qt4-window/](https://pythonspot.com/qt4-window/) 4 | 5 | ![pyqt window](img/1629a04730237a4379bd58ced163e08f.jpg) 6 | 7 | Ubuntu 上的 [PyQt4](https://pythonspot.com/pyqt4/) 窗口 8 | 9 | 在本教程中,您将学习如何使用 [PyQT4](https://pythonspot.com/pyqt4/) 创建图形 hello world 应用程序。 10 | 11 | [PyQT4](https://pythonspot.com/pyqt4/) ,它是[图形用户界面(GUI)](https://pythonspot.com/gui)编程的 Python 选项之一。 12 | 13 | ## PyQt4 窗口示例: 14 | 15 | 该应用程序将创建一个可最小化,最大化和调整其大小的图形窗口。 16 | 17 | ```py 18 | #! /usr/bin/env python 19 | # -*- coding: utf-8 -*- 20 | # 21 | import sys 22 | from PyQt4.QtGui import * 23 | 24 | # Create an PyQT4 application object. 25 | a = QApplication(sys.argv) 26 | 27 | # The QWidget widget is the base class of all user interface objects in PyQt4. 28 | w = QWidget() 29 | 30 | # Set window size. 31 | w.resize(320, 240) 32 | 33 | # Set window title 34 | w.setWindowTitle("Hello World!") 35 | 36 | # Show window 37 | w.show() 38 | 39 | sys.exit(a.exec_()) 40 | 41 | ``` 42 | 43 | 必须导入 [PyQT4](https://pythonspot.com/pyqt4/) 模块,我们通过以下代码行进行导入: 44 | 45 | ```py 46 | from PyQt4.QtGui import * 47 | 48 | ``` 49 | 50 | 我们使用`QApplication()`创建 [PyQT4](https://pythonspot.com/pyqt4/) 应用程序对象: 51 | 52 | ```py 53 | a = QApplication(sys.argv) 54 | 55 | ``` 56 | 57 | 我们创建窗口(`QWidget`),调整大小,设置标题并显示以下代码: 58 | 59 | ```py 60 | w = QWidget() 61 | w.resize(320, 240) 62 | w.setWindowTitle("Hello World!") 63 | 64 | ``` 65 | 66 | 不要忘记显示窗口: 67 | 68 | ```py 69 | # Show window 70 | w.show() 71 | 72 | ``` 73 | 74 | 您可以下载 PyQt4 示例集合:[下载 PyQT 代码(批量集合)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/31.md: -------------------------------------------------------------------------------- 1 | # Python `subprocess` 2 | 3 | > 原文: [https://pythonspot.com/python-subprocess/](https://pythonspot.com/python-subprocess/) 4 | 5 | `subprocess`模块使您可以从 Python 程序启动新应用程序。 多么酷啊? 6 | 7 | ## 在 Python 中启动一个进程: 8 | 9 | 您可以使用`Popen`函数调用在 Python 中启动进程。 下面的程序启动 Unix 程序`cat`,第二个参数是参数。 这相当于`cat test.py`。您可以使用任何参数启动任何程序。 10 | 11 | ```py 12 | #!/usr/bin/env python 13 | 14 | from subprocess import Popen, PIPE 15 | 16 | process = Popen(['cat', 'test.py'], stdout=PIPE, stderr=PIPE) 17 | stdout, stderr = process.communicate() 18 | print stdout 19 | 20 | ``` 21 | 22 | `process.communicate()`调用从进程中读取输入和输出。`stdout`是进程输出。仅当发生错误时,`stderr`才会被写入。 如果要等待程序完成,可以调用`Popen.wait()`。 23 | 24 | ## `subprocess.call()`: 25 | 26 | `subprocess`具有方法`call()`,可用于启动程序。该参数是一个列表,其第一个参数必须是程序名称。完整的定义是: 27 | 28 | ```py 29 | subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) 30 | # Run the command described by args. 31 | # Wait for command to complete, then return the returncode attribute. 32 | 33 | ``` 34 | 35 | 在下面的示例中,完整的命令将为`ls -l` 36 | 37 | ```py 38 | #!/usr/bin/env python 39 | 40 | import subprocess 41 | subprocess.call(["ls", "-l"]) 42 | 43 | ``` 44 | 45 | ## 保存进程输出(标准输出) 46 | 47 | 我们可以获取程序的输出,并使用`check_output`直接将其存储在字符串中。该方法定义为: 48 | 49 | ```py 50 | subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False) 51 | # Run command with arguments and return its output as a byte string. 52 | 53 | ``` 54 | 55 | 用法示例: 56 | 57 | ```py 58 | #!/usr/bin/env python 59 | import subprocess 60 | 61 | s = subprocess.check_output(["echo", "Hello World!"]) 62 | print("s = " + s) 63 | 64 | ``` -------------------------------------------------------------------------------- /docs/229.md: -------------------------------------------------------------------------------- 1 | # Tk 小部件 2 | 3 | > 原文: [https://pythonspot.com/tk-widgets/](https://pythonspot.com/tk-widgets/) 4 | 5 | [Tkinter](https://pythonspot.com/tkinter/) 有几个小部件,包括: 6 | 7 | * 标签 8 | * 编辑文字 9 | * 图片 10 | * 按钮(之前讨论过) 11 | 12 | 在本文中,我们将展示如何使用其中的一些 Tkinter 小部件。 请记住,Python 2.x 和 3.x 的 Tkinter 略有不同 13 | 14 | ## 标签 15 | 16 | 要创建标签,我们只需调用`Label()`类并将其打包。`padx`和`pady`是水平和垂直填充。 17 | 18 | ```py 19 | from Tkinter import * 20 | 21 | root = Tk() 22 | root.title('Python Tk Examples @ pythonspot.com') 23 | Label(root, text='Python').pack(pady=20,padx=50) 24 | 25 | root.mainloop() 26 | 27 | ``` 28 | 29 | ## `EditText`(条目小部件) 30 | 31 | 要获取用户输入,可以使用条目小部件。 32 | 33 | ```py 34 | from Tkinter import * 35 | 36 | root = Tk() 37 | root.title('Python Tk Examples @ pythonspot.com') 38 | 39 | var = StringVar() 40 | textbox = Entry(root, textvariable=var) 41 | textbox.focus_set() 42 | textbox.pack(pady=10, padx=10) 43 | 44 | root.mainloop() 45 | 46 | ``` 47 | 48 | 结果: 49 | 50 | ![tk entry](img/37a3257ed2c7f13f0b141e9c9aa72d3e.jpg) 51 | 52 | tk 条目 53 | 54 | ## 图像 55 | 56 | Tk 具有一个小部件来显示图像,即`PhotoImage`。 加载图像非常容易: 57 | 58 | ```py 59 | from Tkinter import * 60 | import os 61 | 62 | root = Tk() 63 | img = PhotoImage(file="logo2.png") 64 | panel = Label(root, image = img) 65 | panel.pack(side = "bottom", fill = "both", expand = "yes") 66 | root.mainloop() 67 | 68 | ``` 69 | 70 | 结果: 71 | 72 | ![python tk image](img/b572dd0f882ff709fb5896b3f7c9905f.jpg) 73 | 74 | python tk 图像 75 | 76 | ## GUI 编辑器 77 | 78 | Tkinter GUI 编辑器的概述可以在这里找到: [http://wiki.tcl.tk/4056](https://wiki.tcl.tk/4056) 79 | 80 | [下载 tkinter 示例](/download-tkinter-examples) -------------------------------------------------------------------------------- /docs/202.md: -------------------------------------------------------------------------------- 1 | # PyQt5 窗口 2 | 3 | > 原文: [https://pythonspot.com/pyqt5-window/](https://pythonspot.com/pyqt5-window/) 4 | 5 | 如果您尚未安装 [PyQT5](https://pythonspot.com/pyqt5/) ,则应先安装。 在终端中,您可以输入: 6 | 7 | ```py 8 | sudo apt-get install python3-pyqt5 9 | 10 | ``` 11 | 12 | 如果您使用 Windows 或 Mac 计算机,则可以从以下网站下载 [PyQT5](https://pythonspot.com/pyqt5/):[https://www.riverbankcomputing.com/software/pyqt/download5](https://www.riverbankcomputing.com/software/pyqt/download5) 13 | 14 | ## PyQt5 窗口 15 | 16 | 您可以使用以下代码创建 [**PyQT5**](https://pythonspot.com/pyqt5/) 窗口: 17 | 18 | ```py 19 | import sys 20 | from PyQt5.QtWidgets import QApplication, QWidget 21 | from PyQt5.QtGui import QIcon 22 | 23 | class App(QWidget): 24 | 25 | def __init__(self): 26 | super().__init__() 27 | self.title = 'PyQt5 simple window - pythonspot.com' 28 | self.left = 10 29 | self.top = 10 30 | self.width = 640 31 | self.height = 480 32 | self.initUI() 33 | 34 | def initUI(self): 35 | self.setWindowTitle(self.title) 36 | self.setGeometry(self.left, self.top, self.width, self.height) 37 | self.show() 38 | 39 | if __name__ == '__main__': 40 | app = QApplication(sys.argv) 41 | ex = App() 42 | sys.exit(app.exec_()) 43 | 44 | ``` 45 | 46 | 我们使用`setGeometry(left, top, width, height)`方法设置窗口大小。 使用`setWindowTitle(title)`设置窗口标题。 最后调用`show()`以显示窗口。 47 | 48 | 运行: 49 | 50 | ```py 51 | python3 window.py 52 | 53 | ``` 54 | 55 | ![pyqt5-window](img/4759d47def6e28610123bd8cc0a9a6bf.jpg) 56 | 57 | [下载 PyQT5 代码](https://pythonspot.com/download-pyqt5-examples/) 58 | 59 | 输出看起来应该类似于上面的屏幕截图(取决于您的操作系统)。 -------------------------------------------------------------------------------- /docs/11.md: -------------------------------------------------------------------------------- 1 | # 作用域 2 | 3 | > 原文: [https://pythonspot.com/scope](https://pythonspot.com/scope) 4 | 5 | ## 作用域 6 | 7 | 变量只能到达定义它们的区域,这称为作用域。 将其视为可以使用变量的代码区域。 Python 支持全局变量(可在整个程序中使用)和局部变量。 8 | 9 | 默认情况下,函数中声明的所有变量都是局部变量。要访问函数内部的全局变量,必须明确定义“全局变量”。 10 | 11 | ## 示例 12 | 13 | 下面我们将研究局部变量和作用域的用法。它**不起作用**: 14 | 15 | ```py 16 | #!/usr/bin/python 17 | 18 | def f(x,y): 19 | print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y)) 20 | print('x * y = ' + str(x*y)) 21 | z = 4 # cannot reach z, so THIS WON'T WORK 22 | 23 | z = 3 24 | f(3,2) 25 | 26 | ``` 27 | 28 | 但这将: 29 | 30 | ```py 31 | #!/usr/bin/python 32 | 33 | def f(x,y): 34 | z = 3 35 | print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y)) 36 | print('x * y = ' + str(x*y)) 37 | print(z) # can reach because variable z is defined in the function 38 | 39 | f(3,2) 40 | 41 | ``` 42 | 43 | 让我们进一步研究一下: 44 | 45 | ```py 46 | #!/usr/bin/python 47 | 48 | def f(x,y,z): 49 | return x+y+z # this will return the sum because all variables are passed as parameters 50 | 51 | sum = f(3,2,1) 52 | print(sum) 53 | 54 | ``` 55 | 56 | ## 调用函数 57 | 58 | 中的函数我们还可以从另一个函数中获取变量的内容: 59 | 60 | ```py 61 | #!/usr/bin/python 62 | 63 | def highFive(): 64 | return 5 65 | 66 | def f(x,y): 67 | z = highFive() # we get the variable contents from highFive() 68 | return x+y+z # returns x+y+z. z is reachable becaue it is defined above 69 | 70 | result = f(3,2) 71 | print(result) 72 | 73 | ``` 74 | 75 | 如果在代码中的任何位置都可以访问变量,则称为**全局变量**。如果仅在作用域内部知道变量,则将其称为**局部变量**。 76 | 77 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/33.md: -------------------------------------------------------------------------------- 1 | # Python Lambda 2 | 3 | > 原文: [https://pythonspot.com/python-lambda/](https://pythonspot.com/python-lambda/) 4 | 5 | 我们可以创建匿名函数,称为 lambda 函数。 Lambda 函数与常规 Python 函数不同,它们源自 Lambda 演算。 它允许您编写非常简短的函数。 6 | 7 | ## Lambda 函数示例 8 | 9 | 此代码显示 lambda 函数的用法: 10 | 11 | ```py 12 | #!/usr/bin/env python 13 | 14 | f = lambda x : 2 * x 15 | print f(3) 16 | 17 | ``` 18 | 19 | Lambda 函数从不使用`return`语句,它总是返回。 Lambda 函数可能包含`if`语句: 20 | 21 | ```py 22 | #!/usr/bin/env python 23 | 24 | f = lambda x: x > 10 25 | print(f(2)) 26 | print(f(12)) 27 | 28 | ``` 29 | 30 | ## `map`函数 31 | 32 | `map`的定义是`map(function, iterable)`。它将函数应用于可迭代对象的每个项目。我们可以对列表和 lambda 函数使用`map()`: 33 | 34 | ```py 35 | #!/usr/bin/env python 36 | 37 | list = [1,2,3,4,5] 38 | squaredList = map(lambda x: x*x, list) 39 | print(squaredList) 40 | 41 | ``` 42 | 43 | 在使用 lambda 函数的任何地方,都可以改用普通函数。 Lambda 函数不是语句,而是表达式。 Lambda 函数不支持语句块。 44 | 45 | ## `filter`函数 46 | 47 | `filter(function, iterable)`从元素中创建一个新列表,该函数为其返回`True`。例: 48 | 49 | ```py 50 | #!/usr/bin/env python 51 | 52 | list = [1,2,3,4,5,6,7,8,9,10] 53 | newList = filter(lambda x: x % 2 == 0, list) 54 | print(newList) 55 | 56 | ``` 57 | 58 | 返回列表只包含 lambda 表达式`lamba x: x % 2 == 0`为真的元素。 59 | 60 | ## `reduce`函数 61 | 62 | 函数`reduce(function, iterable)`从左到右将函数应用在`iterable`的各个项目上。 例: 63 | 64 | ```py 65 | #!/usr/bin/env python 66 | 67 | list = [1,2,3,4,5] 68 | s = reduce(lambda x,y: x+y, list) 69 | print(s) 70 | 71 | ``` 72 | 73 | 在这种情况下,表达式始终为真,因此它简单地汇总了列表中的元素。 另一个例子: 74 | 75 | ```py 76 | #!/usr/bin/env python 77 | 78 | list = [10,6,7,5,2,1,8,5] 79 | s = reduce(lambda x,y: x if (x > y) else y, list) 80 | print(s) 81 | 82 | ``` -------------------------------------------------------------------------------- /docs/7.md: -------------------------------------------------------------------------------- 1 | # Python 列表 2 | 3 | > 原文: [https://pythonspot.com/python-lists/](https://pythonspot.com/python-lists/) 4 | 5 | 列表是一个序列和一个基本的数据结构。 列表可以包含字符串(文本)和数字。 列表类似于其他编程语言中的数组,但具有其他功能。 6 | 7 | ## Python 列表 8 | 9 | 我们用方括号`[]`定义列表。 要访问数据,请使用这些相同的括号。列表用法示例: 10 | 11 | ```py 12 | #!/usr/bin/python 13 | 14 | l = [ "Drake", "Derp", "Derek", "Dominique" ] 15 | 16 | print(l) # prints all elements 17 | print(l[0]) # print first element 18 | print(l[1]) # prints second element 19 | 20 | ``` 21 | 22 | ## 添加/删除 23 | 24 | 我们可以使用`append()`和`remove()`函数来操作列表。 25 | 26 | ```py 27 | #!/usr/bin/python 28 | 29 | l = [ "Drake", "Derp", "Derek", "Dominique" ] 30 | 31 | print(l) # prints all elements 32 | l.append("Victoria") # add element. 33 | print(l) # print all elements 34 | l.remove("Derp") # remove element. 35 | l.remove("Drake") # remove element. 36 | print(l) # print all elements. 37 | 38 | ``` 39 | 40 | ## 排序列表 41 | 42 | 我们可以使用`sort()`函数对列表进行排序。 43 | 44 | ```py 45 | #!/usr/bin/python 46 | 47 | l = [ "Drake", "Derp", "Derek", "Dominique" ] 48 | 49 | print(l) # prints all elements 50 | l.sort() # sorts the list in alphabetical order 51 | print(l) # prints all elements 52 | 53 | ``` 54 | 55 | 如果要按降序排列列表,只需使用`reverse()`函数。 56 | 57 | ```py 58 | #!/usr/bin/python 59 | 60 | l = [ "Drake", "Derp", "Derek", "Dominique" ] 61 | 62 | print(l) # prints all elements 63 | l.sort() # sorts the list in alphabetical order 64 | l.reverse() # reverse order. 65 | print(l) # prints all elements 66 | 67 | ``` 68 | 69 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/220.md: -------------------------------------------------------------------------------- 1 | # QT4 表格 2 | 3 | > 原文: [https://pythonspot.com/qt4-table/](https://pythonspot.com/qt4-table/) 4 | 5 | 我们可以使用`QTableWidget`来显示表格,`QTableWidget`是 [PyQt](https://pythonspot.com/pyqt4/) 模块的一部分。 我们设置标题,行数,列数并添加数据。 6 | 7 | ## Qt4 表格示例 8 | 9 | 下面的例子: 10 | 11 | ```py 12 | from PyQt4.QtGui import * 13 | from PyQt4.QtCore import * 14 | import sys 15 | 16 | def main(): 17 | app = QApplication(sys.argv) 18 | table = QTableWidget() 19 | tableItem = QTableWidgetItem() 20 | 21 | # initiate table 22 | table.setWindowTitle("QTableWidget Example @pythonspot.com") 23 | table.resize(400, 250) 24 | table.setRowCount(4) 25 | table.setColumnCount(2) 26 | 27 | # set data 28 | table.setItem(0,0, QTableWidgetItem("Item (1,1)")) 29 | table.setItem(0,1, QTableWidgetItem("Item (1,2)")) 30 | table.setItem(1,0, QTableWidgetItem("Item (2,1)")) 31 | table.setItem(1,1, QTableWidgetItem("Item (2,2)")) 32 | table.setItem(2,0, QTableWidgetItem("Item (3,1)")) 33 | table.setItem(2,1, QTableWidgetItem("Item (3,2)")) 34 | table.setItem(3,0, QTableWidgetItem("Item (4,1)")) 35 | table.setItem(3,1, QTableWidgetItem("Item (4,2)")) 36 | 37 | # show table 38 | table.show() 39 | return app.exec_() 40 | 41 | if __name__ == '__main__': 42 | main() 43 | 44 | ``` 45 | 46 | 结果: 47 | 48 | ![PyQT Table](img/185c656e13f47debbad67f5133a4215d.jpg) 49 | 50 | ![PyQT Table ](img/a60b759f387958b2b4c7046ecd6f4b87.jpg) 51 | 52 | ![PyQT Table tooltips](img/f1f56d1db3e8574fad782a6392cbb56c.jpg) 53 | 54 | [PyQT](https://pythonspot.com/pyqt4/) 表格提示 55 | 56 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/230.md: -------------------------------------------------------------------------------- 1 | # TkInter 消息框 2 | 3 | > 原文: [https://pythonspot.com/tk-message-box/](https://pythonspot.com/tk-message-box/) 4 | 5 | [**Tkinter**](https://pythonspot.com/tkinter/) tkMessageBox 具有多种显示**消息框**的方法。 6 | 7 | 适用于 Python 2.7 的 [**Tkinter**](https://pythonspot.com/tkinter/) 和 Python 3 之间略有不同。 要找到您的 Python 版本,请尝试以下命令之一: 8 | 9 | ```py 10 | python --version 11 | python3 --version 12 | 13 | ``` 14 | 15 | ### Tkinter 消息框 16 | 17 | ![Tkinter Message box](img/e9d03180e4231af35183a0c4f9ff6277.jpg) 18 | 19 | `TkMessage`框显示一个简约的 TkInter 对话框。 20 | 21 | ![tkinter-dialog](img/cada3d59a1bd4887694d8ded4576f519.jpg) 22 | 23 | Tk 消息框对话框 24 | 25 | Tkinter 包括其他几个消息框: 26 | 27 | * `showerror()` 28 | * `showwarning()` 29 | * `showinfo()` 30 | 31 | Python 3.x 32 | 33 | ```py 34 | import tkinter 35 | from tkinter import messagebox 36 | 37 | # hide main window 38 | root = tkinter.Tk() 39 | root.withdraw() 40 | 41 | # message box display 42 | messagebox.showerror("Error", "Error message") 43 | messagebox.showwarning("Warning","Warning message") 44 | messagebox.showinfo("Information","Informative message") 45 | 46 | ``` 47 | 48 | Python 2.7 49 | 50 | ```py 51 | import Tkinter 52 | import tkMessageBox 53 | 54 | # An error box 55 | tkMessageBox.showerror("Error","No disk space left on device") 56 | 57 | # A warning box 58 | tkMessageBox.showwarning("Warning","Could not start service") 59 | 60 | # An information box 61 | tkMessageBox.showinfo("Information","Created in Python.") 62 | 63 | ``` 64 | 65 | 您可能会喜欢: [Tkinter 问题对话框](https://pythonspot.com/tkinter-askquestion-dialog/)或[更多 Tkinter](https://pythonspot.com/tkinter/) 66 | 67 | [下载 tkinter 示例](/download-tkinter-examples) -------------------------------------------------------------------------------- /docs/219.md: -------------------------------------------------------------------------------- 1 | # PyQt4 文本框 2 | 3 | > 原文: [https://pythonspot.com/qt4-textbox-example/](https://pythonspot.com/qt4-textbox-example/) 4 | 5 | ![pyqt textbox](img/b2c2549d84491412df87f80cf61fbbdc.jpg) 6 | 7 | PyQt4 文本框示例 8 | 9 | 在本文中,您将学习如何使用 [PyQt4](https://pythonspot.com/pyqt4/) 与文本框进行交互。 10 | 11 | 如果要在文本框(`QLineEdit`)中显示文本,则可以使用`setText()`方法。 12 | 13 | ## PyQt4 `QLineEdit` 14 | 15 | 如果按下按钮,下面的文本框示例将更改文本。 16 | 17 | ```py 18 | import sys 19 | from PyQt4.QtCore import pyqtSlot 20 | from PyQt4.QtGui import * 21 | 22 | # create our window 23 | app = QApplication(sys.argv) 24 | w = QWidget() 25 | w.setWindowTitle('Textbox example @pythonspot.com') 26 | 27 | # Create textbox 28 | textbox = QLineEdit(w) 29 | textbox.move(20, 20) 30 | textbox.resize(280,40) 31 | 32 | # Set window size. 33 | w.resize(320, 150) 34 | 35 | # Create a button in the window 36 | button = QPushButton('Click me', w) 37 | button.move(20,80) 38 | 39 | # Create the actions 40 | @pyqtSlot() 41 | def on_click(): 42 | textbox.setText("Button clicked.") 43 | 44 | # connect the signals to the slots 45 | button.clicked.connect(on_click) 46 | 47 | # Show the window and run the app 48 | w.show() 49 | app.exec_() 50 | 51 | ``` 52 | 53 | 使用以下行创建文本字段: 54 | 55 | ```py 56 | textbox = QLineEdit(w) 57 | textbox.move(20, 20) 58 | textbox.resize(280,40) 59 | 60 | ``` 61 | 62 | 该按钮(来自屏幕截图)由以下部分制成: 63 | 64 | ```py 65 | button = QPushButton('Click me', w) 66 | 67 | ``` 68 | 69 | 我们通过以下方式将按钮连接到`on_click`函数: 70 | 71 | ```py 72 | # connect the signals to the slots 73 | button.clicked.connect(on_click) 74 | 75 | ``` 76 | 77 | 此函数使用`setText()`设置文本框。 78 | 79 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/78.md: -------------------------------------------------------------------------------- 1 | # 读取电子邮件,pop3 2 | 3 | > 原文: [https://pythonspot.com/read-email-pop3/](https://pythonspot.com/read-email-pop3/) 4 | 5 | 在本教程中,您将学习如何使用`poplib`模块来**接收电子邮件**。 邮件服务器需要支持 **pop3**,但是大多数邮件服务器都支持。邮局协议(POP3)仅用于接收邮件,发送时需要 SMTP 协议。 6 | 7 | ![pop3-email-server](img/b7a7593691fc70c549881f1570ecc3b1.jpg) 8 | 9 | 简化邮件服务器 10 | 11 | ## 元数据 12 | 13 | 每封电子邮件将包含许多变量,但是这些是最重要的变量: 14 | 15 | | 特征 | 描述 | 16 | | --- | --- | 17 | | 消息 ID | 唯一标识符 | 18 | | 从 | 电子邮件来自哪里? | 19 | | 至 | 电子邮件发送到哪里了? | 20 | | 日期 | 日期 | 21 | | 主题 | 电子邮件主题。 | 22 | 23 | ## 读取电子邮件示例 24 | 25 | 您可以使用邮局协议(协议)直接从邮件服务器请求消息。您不必担心内部协议,因为您可以使用`poplib`模块。 26 | 27 | 使用以下方法连接服务器并进行身份验证: 28 | 29 | ```py 30 | 31 | # connect to server 32 | server = poplib.POP3(SERVER) 33 | 34 | # login 35 | server.user(USER) 36 | server.pass_(PASSWORD) 37 | 38 | ``` 39 | 40 | 下面的程序从服务器获取 10 封电子邮件,包括邮件头 41 | 42 | ```py 43 | 44 | import poplib 45 | import string, random 46 | import StringIO, rfc822 47 | 48 | def readMail(): 49 | SERVER = "YOUR MAIL SERVER" 50 | USER = "YOUR USERNAME [email protected]COM" 51 | PASSWORD = "YOUR PASSWORD" 52 | 53 | # connect to server 54 | server = poplib.POP3(SERVER) 55 | 56 | # login 57 | server.user(USER) 58 | server.pass_(PASSWORD) 59 | 60 | # list items on server 61 | resp, items, octets = server.list() 62 | 63 | for i in range(0,10): 64 | id, size = string.split(items[i]) 65 | resp, text, octets = server.retr(id) 66 | 67 | text = string.join(text, "\n") 68 | file = StringIO.StringIO(text) 69 | 70 | message = rfc822.Message(file) 71 | 72 | for k, v in message.items(): 73 | print k, "=", v 74 | 75 | readMail() 76 | 77 | ``` -------------------------------------------------------------------------------- /docs/25.md: -------------------------------------------------------------------------------- 1 | # 继承 2 | 3 | > 原文: [https://pythonspot.com/inheritance/](https://pythonspot.com/inheritance/) 4 | 5 | 类可以继承其他类的功能。 如果使用从超类继承的类创建对象,则该对象将包含该类和超类的方法。 对于超类和从超类继承的类的变量也是如此。 6 | 7 | 与其他流行的编程语言不同,Python 支持从多个类继承。 8 | 9 | ## 介绍 10 | 11 | 我们定义一个名为`User`的基本类: 12 | 13 | ```py 14 | class User: 15 | name = "" 16 | 17 | def __init__(self, name): 18 | self.name = name 19 | 20 | def printName(self): 21 | print("Name = " + self.name) 22 | 23 | brian = User("brian") 24 | brian.printName() 25 | 26 | ``` 27 | 28 | 这将创建一个称为 brian 的实例,并输出其给定名称。 我们创建另一个称为 Programmer 的类。 29 | 30 | ```py 31 | class Programmer(User): 32 | 33 | def __init__(self, name): 34 | self.name = name 35 | 36 | def doPython(self): 37 | print("Programming Python") 38 | 39 | ``` 40 | 41 | 除了参数中提供了`User`之外,这看起来非常像标准类。 这意味着可以在`Programmer`类中访问`User`类的所有功能。 42 | 43 | ## 继承示例 44 | 45 | Python 继承的完整示例: 46 | 47 | ```py 48 | class User: 49 | name = "" 50 | 51 | def __init__(self, name): 52 | self.name = name 53 | 54 | def printName(self): 55 | print("Name = " + self.name) 56 | 57 | class Programmer(User): 58 | def __init__(self, name): 59 | self.name = name 60 | 61 | def doPython(self): 62 | print("Programming Python") 63 | 64 | brian = User("brian") 65 | brian.printName() 66 | 67 | diana = Programmer("Diana") 68 | diana.printName() 69 | diana.doPython() 70 | 71 | ``` 72 | 73 | 输出: 74 | 75 | ```py 76 | Name = brian 77 | Name = Diana 78 | Programming Python 79 | 80 | ``` 81 | 82 | `Brian`是`User`的实例,只能访问方法`printName`。`Diana`是`Programmer`的一个实例,该类是继承自`User`的类,并且可以访问`Programmer`和`User`中的方法。 83 | 84 | [下载练习](https://pythonspot.com/download-oop-exercises/) -------------------------------------------------------------------------------- /docs/74.md: -------------------------------------------------------------------------------- 1 | # Python 和 HTTP 下载文件 2 | 3 | > 原文: [https://pythonspot.com/http-download-file-with-python/](https://pythonspot.com/http-download-file-with-python/) 4 | 5 | 可以使用`urllib2`模块从 Web 下载数据(网络资源访问)。 这些数据可以是文件,网站,也可以是您想要 Python 下载的任何数据。 该模块支持 HTTP,HTTPS,FTP 和其他几种协议。 6 | 7 | 在本文中,您将学习如何使用 Python 从 Web 下载数据。 8 | 9 | ## 下载文本 10 | 11 | 要下载纯文本文件,请使用以下代码: 12 | 13 | ```py 14 | import urllib2 15 | response = urllib2.urlopen('https://wordpress.org/plugins/about/readme.txt') 16 | data = response.read() 17 | print(data) 18 | 19 | ``` 20 | 21 | 我们使用`urllib2.urlopen()`方法获得响应对象,其中参数是链接。 使用`response.read()`方法调用接收所有文件内容。 调用此命令后,我们将文件数据存储在字符串类型的 Python 变量中。 22 | 23 | ## 下载 HTML 24 | 25 | 这将要求网站提供 [html](https://en.wikipedia.org/wiki/HTML) 代码。它将所有内容输出到屏幕。 26 | 27 | ```py 28 | import urllib2 29 | response = urllib2.urlopen('https://en.wikipedia.org/') 30 | html = response.read() 31 | print html 32 | 33 | ``` 34 | 35 | ## 使用 Python 下载文件 36 | 37 | 下载文件后,可以非常轻松地将数据保存到磁盘: 38 | 39 | ```py 40 | import urllib2 41 | response = urllib2.urlopen('https://wordpress.org/plugins/about/readme.txt') 42 | data = response.read() 43 | 44 | # Write data to file 45 | filename = "test.txt" 46 | file_ = open(filename, 'w') 47 | file_.write(data) 48 | file_.close() 49 | 50 | ``` 51 | 52 | 代码的第一部分将文件内容下载到变量数据中: 53 | 54 | ```py 55 | 56 | import urllib2 57 | response = urllib2.urlopen('https://wordpress.org/plugins/about/readme.txt') 58 | data = response.read() 59 | 60 | ``` 61 | 62 | 第二部分将其存储到文件中(此文件不需要具有相同的文件名) 63 | 64 | ```py 65 | 66 | # Write data to file 67 | filename = "test.txt" 68 | file_ = open(filename, 'w') 69 | file_.write(data) 70 | file_.close() 71 | 72 | ``` 73 | 74 | `"w"`参数创建文件(如果存在,则覆盖)。 您可以[在此处阅读有关写入文件的更多信息](https://pythonspot.com/write-file/)。 -------------------------------------------------------------------------------- /docs/35.md: -------------------------------------------------------------------------------- 1 | # Python 模块 2 | 3 | > 原文: [https://pythonspot.com/python-modules/](https://pythonspot.com/python-modules/) 4 | 5 | ## 模块化编程 6 | 7 | 在进行编程时,该软件可以迅速扩展为大型代码库。 为了管理复杂性,我们可以使用类,函数和模块。 8 | 9 | ## 模块内容 10 | 11 | 要显示模块中的可访问函数(和包含的变量),可以使用以下代码: 12 | 13 | ```py 14 | #!/usr/bin/env python 15 | import sys 16 | 17 | print(dir(sys)) 18 | 19 | ``` 20 | 21 | 结果: 22 | 23 | ```py 24 | 25 | ['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__name__', '__package__', '__plen', '__stderr__', '__stdin__', 26 | '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', '_mercurial', '_multiarch', 'api_version', 'argv', 27 | 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 28 | 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style' 29 | , 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 30 | 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 31 | 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags' 32 | , 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 33 | 'warnoptions'] 34 | 35 | ``` 36 | 37 | ## 创建一个模块 38 | 39 | 可以按照以下步骤创建自己的模块: 40 | 41 | 创建一个名为`test.py`的文件(您的模块) 42 | 43 | ```py 44 | #!/usr/bin/env python 45 | 46 | def add(a,b): 47 | return a+b 48 | 49 | ``` 50 | 51 | 然后创建一个名为`app.py`的文件: 52 | 53 | ```py 54 | from test import * 55 | 56 | print('hello') 57 | print(add(5,2)) 58 | 59 | ``` -------------------------------------------------------------------------------- /docs/221.md: -------------------------------------------------------------------------------- 1 | # QT4 标签 2 | 3 | > 原文: [https://pythonspot.com/qt4-tabs/](https://pythonspot.com/qt4-tabs/) 4 | 5 | 选项卡在图形应用程序中非常有用。 它们出现在网络浏览器,文本编辑器和任何其他应用中。 要创建选项卡式窗口,您需要调用`QTabWidget()`函数。 每个选项卡都是您之前看到的`QWidget()`。 您可以使用以下函数将`QWidget`与`QTabWidget`连接: 6 | 7 | ```py 8 | tabs.addTab(tab1,"Tab 1") 9 | 10 | ``` 11 | 12 | 其中第一个参数是选项卡对象,第二个参数是显示在屏幕上的名称。 我们在第一个标签(`QWidget`)中添加了一些按钮。 13 | 14 | ## 示例代码: 15 | 16 | ```py 17 | from PyQt4 import QtGui 18 | from PyQt4 import QtCore 19 | import sys 20 | 21 | def main(): 22 | 23 | app = QtGui.QApplication(sys.argv) 24 | tabs = QtGui.QTabWidget() 25 | 26 | # Create tabs 27 | tab1 = QtGui.QWidget() 28 | tab2 = QtGui.QWidget() 29 | tab3 = QtGui.QWidget() 30 | tab4 = QtGui.QWidget() 31 | 32 | # Resize width and height 33 | tabs.resize(250, 150) 34 | 35 | # Set layout of first tab 36 | vBoxlayout = QtGui.QVBoxLayout() 37 | pushButton1 = QtGui.QPushButton("Start") 38 | pushButton2 = QtGui.QPushButton("Settings") 39 | pushButton3 = QtGui.QPushButton("Stop") 40 | vBoxlayout.addWidget(pushButton1) 41 | vBoxlayout.addWidget(pushButton2) 42 | vBoxlayout.addWidget(pushButton3) 43 | tab1.setLayout(vBoxlayout) 44 | 45 | # Add tabs 46 | tabs.addTab(tab1,"Tab 1") 47 | tabs.addTab(tab2,"Tab 2") 48 | tabs.addTab(tab3,"Tab 3") 49 | tabs.addTab(tab4,"Tab 4") 50 | 51 | # Set title and show 52 | tabs.setWindowTitle('PyQt QTabWidget @ pythonspot.com') 53 | tabs.show() 54 | 55 | sys.exit(app.exec_()) 56 | 57 | if __name__ == '__main__': 58 | main() 59 | 60 | ``` 61 | 62 | 结果: 63 | 64 | ![PyQT Tabs](img/71481f97c660d6556a1bf3c5b70648bc.jpg) 65 | 66 | PyQT 标签 67 | 68 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /asset/share.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Share-1 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/82.md: -------------------------------------------------------------------------------- 1 | # Matplotlib 直方图 2 | 3 | > 原文: [https://pythonspot.com/matplotlib-histogram/](https://pythonspot.com/matplotlib-histogram/) 4 | 5 | [**Matplotlib**](https://pythonspot.com/matplotlib/) 可用于创建直方图。直方图在垂直轴上显示频率,水平轴是另一个维度。通常它具有箱,其中每个箱具有最小值和最大值。 每个箱的频率也介于`x`和无穷大之间。 6 | 7 | ## Matplotlib 直方图示例 8 | 9 | 下面显示了最小的 [Matplotlib](https://pythonspot.com/matplotlib/) 直方图: 10 | 11 | ```py 12 | import numpy as np 13 | import matplotlib.mlab as mlab 14 | import matplotlib.pyplot as plt 15 | 16 | x = [21,22,23,4,5,6,77,8,9,10,31,32,33,34,35,36,37,18,49,50,100] 17 | num_bins = 5 18 | n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5) 19 | plt.show() 20 | 21 | ``` 22 | 23 | 输出: 24 | 25 | ![minimal_hist](img/823633047587a7e6edb407963de58da0.jpg) 26 | 27 | Python 直方图 28 | 29 | ## 完整的 matplotlib 直方图 30 | 31 | 许多东西都可以添加到直方图中,例如拟合线,标签等。 下面的代码创建了更高级的直方图。 32 | 33 | ```py 34 | #!/usr/bin/env python 35 | 36 | import numpy as np 37 | import matplotlib.mlab as mlab 38 | import matplotlib.pyplot as plt 39 | 40 | # example data 41 | mu = 100 # mean of distribution 42 | sigma = 15 # standard deviation of distribution 43 | x = mu + sigma * np.random.randn(10000) 44 | 45 | num_bins = 20 46 | # the histogram of the data 47 | n, bins, patches = plt.hist(x, num_bins, normed=1, facecolor='blue', alpha=0.5) 48 | 49 | # add a 'best fit' line 50 | y = mlab.normpdf(bins, mu, sigma) 51 | plt.plot(bins, y, 'r--') 52 | plt.xlabel('Smarts') 53 | plt.ylabel('Probability') 54 | plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$') 55 | 56 | # Tweak spacing to prevent clipping of ylabel 57 | plt.subplots_adjust(left=0.15) 58 | plt.show() 59 | 60 | ``` 61 | 62 | 输出: 63 | 64 | ![python_histogram](img/e4dfab9c6e230bb2f91a6b0715c548d7.jpg) 65 | 66 | Python 直方图 67 | 68 | [下载示例](https://pythonspot.com/download-matplotlib-examples/) -------------------------------------------------------------------------------- /docs/213.md: -------------------------------------------------------------------------------- 1 | # PyQt5 图像 2 | 3 | > 原文: [https://pythonspot.com/pyqt5-image/](https://pythonspot.com/pyqt5-image/) 4 | 5 | PyQt5(和 Qt)默认情况下支持图像。 在本文中,我们将向您展示如何向窗口添加图像。 可以使用`QPixmap`类加载图像。 6 | 7 | ## PyQt5 图像简介 8 | 9 | 将图像添加到 [PyQt5](https://pythonspot.com/pyqt5/) 窗口就像创建标签并将图像添加到该标签一样简单。 10 | 11 | ```py 12 | label = QLabel(self) 13 | pixmap = QPixmap('image.jpeg') 14 | label.setPixmap(pixmap) 15 | 16 | # Optional, resize window to image size 17 | self.resize(pixmap.width(),pixmap.height()) 18 | 19 | ``` 20 | 21 | 这些是必需的导入: 22 | 23 | ```py 24 | from PyQt5.QtWidgets import QApplication, QWidget, QLabel 25 | from PyQt5.QtGui import QIcon, QPixmap 26 | 27 | ``` 28 | 29 | ![pyqt5 qpixmap](img/7c8aa302666166e4fa6969572c501f04.jpg) 30 | 31 | ## PyQt5 加载图像(`QPixmap`) 32 | 33 | 复制下面的代码并运行。 该映像应与程序位于同一目录中。 34 | 35 | ```py 36 | import sys 37 | from PyQt5.QtWidgets import QApplication, QWidget, QLabel 38 | from PyQt5.QtGui import QIcon, QPixmap 39 | 40 | class App(QWidget): 41 | 42 | def __init__(self): 43 | super().__init__() 44 | self.title = 'PyQt5 image - pythonspot.com' 45 | self.left = 10 46 | self.top = 10 47 | self.width = 640 48 | self.height = 480 49 | self.initUI() 50 | 51 | def initUI(self): 52 | self.setWindowTitle(self.title) 53 | self.setGeometry(self.left, self.top, self.width, self.height) 54 | 55 | # Create widget 56 | label = QLabel(self) 57 | pixmap = QPixmap('image.jpeg') 58 | label.setPixmap(pixmap) 59 | self.resize(pixmap.width(),pixmap.height()) 60 | 61 | self.show() 62 | 63 | if __name__ == '__main__': 64 | app = QApplication(sys.argv) 65 | ex = App() 66 | sys.exit(app.exec_()) 67 | 68 | ``` 69 | 70 | [下载 PyQT5 示例](https://pythonspot.com/download-pyqt5-examples/) -------------------------------------------------------------------------------- /docs/222.md: -------------------------------------------------------------------------------- 1 | # QT4 进度条 2 | 3 | > 原文: [https://pythonspot.com/qt4-progressbar/](https://pythonspot.com/qt4-progressbar/) 4 | 5 | 在本文中,我们将演示如何使用进度条小部件。 进度条与其他小部件的不同之处在于,它会及时更新。 6 | 7 | ## QT4 进度条示例 8 | 9 | 让我们从代码开始: 10 | 11 | ```py 12 | #! /usr/bin/env python 13 | # -*- coding: utf-8 -*- 14 | # 15 | import sys 16 | from PyQt4.QtGui import * 17 | from PyQt4.QtCore import * 18 | from PyQt4.QtCore import pyqtSlot,SIGNAL,SLOT 19 | 20 | class QProgBar(QProgressBar): 21 | 22 | value = 0 23 | 24 | @pyqtSlot() 25 | def increaseValue(progressBar): 26 | progressBar.setValue(progressBar.value) 27 | progressBar.value = progressBar.value+1 28 | 29 | # Create an PyQT4 application object. 30 | a = QApplication(sys.argv) 31 | 32 | # The QWidget widget is the base class of all user interface objects in PyQt4. 33 | w = QWidget() 34 | 35 | # Set window size. 36 | w.resize(320, 240) 37 | 38 | # Set window title 39 | w.setWindowTitle("PyQT4 Progressbar @ pythonspot.com ") 40 | 41 | # Create progressBar. 42 | bar = QProgBar(w) 43 | bar.resize(320,50) 44 | bar.setValue(0) 45 | bar.move(0,20) 46 | 47 | # create timer for progressBar 48 | timer = QTimer() 49 | bar.connect(timer,SIGNAL("timeout()"),bar,SLOT("increaseValue()")) 50 | timer.start(400) 51 | 52 | # Show window 53 | w.show() 54 | 55 | sys.exit(a.exec_()) 56 | 57 | ``` 58 | 59 | 实例`bar`(`QProgBar`类的)用于保存进度条的值。 我们调用函数`setValue()`来更新其值。 给定参数`w`将其附加到主窗口。 然后,将其移动到屏幕上的位置`(0, 20)`,并为其指定宽度和高度。 60 | 61 | 为了及时更新进度条,我们需要一个`QTimer()`。 我们将小部件与计时器连接起来,计时器将调用函数`gainValue()`。 我们将计时器设置为每 400 毫秒重复一次函数调用。 您还会看到单词`SLOT`和`SIGNAL`。 如果用户执行诸如单击按钮,在框中键入文本之类的操作,则该小部件会发出信号。 该信号没有任何作用,但可用于连接一个槽,该槽充当接收器并对其起作用。 62 | 63 | 结果: 64 | 65 | ![PyQT Progressbar](img/72b521dd094d336233ce321ce73811a2.jpg) 66 | 67 | PyQT 进度条 68 | 69 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/15.md: -------------------------------------------------------------------------------- 1 | # Python 字典 2 | 3 | > 原文: [https://pythonspot.com/python-dictionaries/](https://pythonspot.com/python-dictionaries/) 4 | 5 | 字典可以看作是键值对的无序集合。 6 | 7 | 一对大括号创建一个空字典: `{}` 。 每个元素都可以映射到某个值。 整数或字符串可用于索引。 字典没有命令。 8 | 9 | ## 字典示例 10 | 11 | 让我们生成一个简单的字典: 12 | 13 | ```py 14 | #!/usr/bin/python 15 | 16 | words = {} 17 | words["Hello"] = "Bonjour" 18 | words["Yes"] = "Oui" 19 | words["No"] = "Non" 20 | words["Bye"] = "Au Revoir" 21 | 22 | print(words["Hello"]) 23 | print(words["No"]) 24 | 25 | ``` 26 | 27 | 输出: 28 | 29 | ```py 30 | 31 | Bonjour 32 | Non 33 | 34 | ``` 35 | 36 | 我们绝不限于值部分中的单个单词定义。 演示: 37 | 38 | ```py 39 | #!/usr/bin/python 40 | 41 | dict = {} 42 | dict['Ford'] = "Car" 43 | dict['Python'] = "The Python Programming Language" 44 | dict[2] = "This sentence is stored here." 45 | 46 | print(dict['Ford']) 47 | print(dict['Python']) 48 | print(dict[2]) 49 | 50 | ``` 51 | 52 | 输出: 53 | 54 | ```py 55 | 56 | Car 57 | The Python Programming Language 58 | This sentence is stored here. 59 | 60 | ``` 61 | 62 | ## 使用字典 63 | 64 | 声明后,我们可以操作存储在字典中的数据。 在下面的示例中显示: 65 | 66 | ```py 67 | #!/usr/bin/python 68 | 69 | words = {} 70 | words["Hello"] = "Bonjour" 71 | words["Yes"] = "Oui" 72 | words["No"] = "Non" 73 | words["Bye"] = "Au Revoir" 74 | 75 | print(words) # print key-pairs. 76 | del words["Yes"] # delete a key-pair. 77 | print(words) # print key-pairs. 78 | words["Yes"] = "Oui!" # add new key-pair. 79 | print(words) # print key-pairs. 80 | 81 | ``` 82 | 83 | 输出: 84 | 85 | ```py 86 | 87 | {'Yes': 'Oui', 'Bye': 'Au Revoir', 'Hello': 'Bonjour', 'No': 'Non'} 88 | {'Bye': 'Au Revoir', 'Hello': 'Bonjour', 'No': 'Non'} 89 | {'Yes': 'Oui!', 'Bye': 'Au Revoir', 'Hello': 'Bonjour', 'No': 'Non'} 90 | 91 | ``` 92 | 93 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/40.md: -------------------------------------------------------------------------------- 1 | # Python 调试 2 | 3 | > 原文: [https://pythonspot.com/python-debugging/](https://pythonspot.com/python-debugging/) 4 | 5 | 我们可以使用调试工具来最小化和发现错误。 在本文中,您将学习最佳的 Python 调试技巧。 6 | 7 | ## PuDB - 基于控制台的 Python 调试器 8 | 9 | ![python-debugging-pudb](img/be30d3c5aa2158a9864d173116eb6291.jpg) 10 | 11 | 使用 PuDB 进行 Python 调试 12 | 13 | 使用 PuDB 终端显示了图形界面。 14 | 15 | ## 安装 16 | 17 | ,以便与 Python 3 一起安装: 18 | 19 | ```py 20 | 21 | sudo pip3 install pudb 22 | 23 | ``` 24 | 25 | 对于 Python 2.x 使用: 26 | 27 | ```py 28 | 29 | sudo pip install pudb 30 | 31 | ``` 32 | 33 | ## 调试 34 | 35 | 使用以下命令开始调试: 36 | 37 | ```py 38 | 39 | $ pudb3 program.py 40 | 41 | ``` 42 | 43 | (或 sudo(如果您没有正确的权限)) 44 | 45 | 您可以逐步完成该程序。 使用`n`键逐步执行该程序。 当前变量内容显示在右上方。 46 | 47 | ![pudb-debug](img/224bd2a6a881437fdda6c2509430673e.jpg) 48 | 49 | python 调试 50 | 51 | 您可以使用`b`键设置断点。 要继续执行直到下一个断点,请按`c`键。 52 | 53 | ![python-breakpoint](img/b4dc9a1dbd2f3dbfa9b8223a63b62c12.jpg) 54 | 55 | Python 程序中的断点 56 | 57 | ## PDB - Python 调试器 58 | 59 | `pdb`模块支持设置断点。 断点是程序的有意暂停。 您可以在其中获取有关程序状态的更多信息。 60 | 61 | 要设置断点,请插入行 62 | 63 | ```py 64 | 65 | pdb.set_trace() 66 | 67 | ``` 68 | 69 | ## 示例 70 | 71 | 实际示例: 72 | 73 | ```py 74 | 75 | import pdb 76 | 77 | x = 3 78 | y = 4 79 | pdb.set_trace() 80 | 81 | total = x + y 82 | pdb.set_trace() 83 | 84 | ``` 85 | 86 | 我们在该程序中插入了一些断点。 程序将在每个断点处暂停(`pdb.set_trace()`)。 要查看变量内容,只需键入变量名称: 87 | 88 | ```py 89 | 90 | $ python3 program.py 91 | (Pdb) x 92 | 3 93 | (Pdb) y 94 | 4 95 | (Pdb) total 96 | *** NameError: name 'total' is not defined 97 | (Pdb) 98 | 99 | ``` 100 | 101 | 按`c`或**继续**继续执行程序,直到下一个断点 102 | 103 | ```py 104 | 105 | (Pdb) c 106 | --Return-- 107 | > program.py(7)()->None 108 | -> total = x + y 109 | (Pdb) total 110 | 7 111 | 112 | ``` -------------------------------------------------------------------------------- /docs/63.md: -------------------------------------------------------------------------------- 1 | # Django 入门 2 | 3 | > 原文: [https://pythonspot.com/django-getting-started/](https://pythonspot.com/django-getting-started/) 4 | 5 | Django 是一个高级 Python Web 框架,它处理了很多 Web 开发的麻烦,因此您可以专注于编写应用程序而无需重新发明轮子。 6 | 7 | 在本教程中,您将学习如何设置基本的 Django Web 应用程序。 8 | 9 | ## Django 教程 10 | 11 | 使用以下命令安装 Django: 12 | 13 | ```py 14 | pip install Django==1.7.1 15 | 16 | ``` 17 | 18 | 安装后,为您的应用程序创建目录`/django-hello/`。 在此目录中,创建具有以下内容的文件`hello.py`: 19 | 20 | ```py 21 | #!/usr/bin/env python 22 | import sys 23 | from django.conf import settings 24 | from django.conf.urls import patterns 25 | from django.http import HttpResponse 26 | from django.core.management import execute_from_command_line 27 | 28 | settings.configure( 29 | DEBUG=True, 30 | SECRET_KEY='asecretkey', 31 | ROOT_URLCONF=sys.modules[__name__], 32 | ) 33 | 34 | def index(request): 35 | return HttpResponse('Hello, World') 36 | 37 | urlpatterns = patterns('', 38 | (r'^hello/$', index), 39 | ) 40 | 41 | if __name__ == "__main__": 42 | execute_from_command_line(sys.argv) 43 | 44 | ``` 45 | 46 | 使用以下命令执行脚本: 47 | 48 | ```py 49 | python hello.py runserver 50 | 51 | ``` 52 | 53 | HTTP Django 服务器将启动,如果您打开 [http://127.0.0.1:8000/hello/](http://127.0.0.1:8000/hello/) 54 | 55 | ![Django Web Framework](img/e60f6a76e7fe2549ced2f64702af8620.jpg) 56 | 57 | Django Web 框架 58 | 59 | ## Django 代码说明: 60 | 61 | 最上面的行导入 Django 库: 62 | 63 | ```py 64 | from django.conf import settings 65 | from django.conf.urls import patterns 66 | from django.http import HttpResponse 67 | from django.core.management import execute_from_command_line 68 | 69 | ``` 70 | 71 | 如果打开链接`/hello/`,则网络服务器将调用`index()`函数。 我们使用以下方式将网址映射到函数: 72 | 73 | ```py 74 | urlpatterns = patterns('', 75 | (r'^hello/$', index), 76 | ) 77 | 78 | ``` 79 | 80 | 在 Django 中,我们提供了网址友好的网址。 这意味着您没有以`/id=1359835`结尾的 url,而是使用目录作为名称。 最后,我们使用`settings.configure`设置一些默认设置。 -------------------------------------------------------------------------------- /docs/30.md: -------------------------------------------------------------------------------- 1 | # 日志 2 | 3 | > 原文: [https://pythonspot.com/logging/](https://pythonspot.com/logging/) 4 | 5 | ## Python 日志记录 6 | 7 | 我们可以在软件应用程序中跟踪事件,这称为“日志”。让我们从一个简单的示例开始,我们将记录一条警告消息。 8 | 9 | 与仅打印错误相反,可以将日志记录配置为禁用输出或保存到文件。 这是简单打印错误的一大优势。 10 | 11 | ## 日志示例 12 | 13 | ```py 14 | import logging 15 | 16 | # print a log message to the console. 17 | logging.warning('This is a warning!') 18 | 19 | ``` 20 | 21 | 这将输出: 22 | 23 | ```py 24 | WARNING:root:This is a warning! 25 | 26 | ``` 27 | 28 | 我们可以轻松地输出到文件: 29 | 30 | ```py 31 | import logging 32 | 33 | logging.basicConfig(filename='program.log',level=logging.DEBUG) 34 | logging.warning('An example message.') 35 | logging.warning('Another message') 36 | 37 | ``` 38 | 39 | 日志消息的重要性取决于严重性。 40 | 41 | ## 严重程度 42 | 43 | 日志模块具有多个严重级别。我们使用以下代码行设置严重性级别: 44 | 45 | ```py 46 | logging.basicConfig(level=logging.DEBUG) 47 | 48 | ``` 49 | 50 | 这些是严重性级别: 51 | 52 | 默认的日志记录级别是警告,表示其他消息将被忽略。 如果要打印调试或信息日志消息,则必须更改日志记录级别,如下所示: 53 | 54 | | 类型 | 描述 | 55 | | --- | --- | 56 | | `DEBUG` | 仅用于问题诊断的信息 | 57 | | `INFO` | 该程序正在按预期运行 | 58 | | `WARNING` | 指示出了问题 | 59 | | `ERROR` | 该软件将不再能够运行 | 60 | | `CRITICAL` | 非常严重的错误 | 61 | 62 | ```py 63 | import logging 64 | 65 | logging.basicConfig(level=logging.DEBUG) 66 | logging.debug('Debug message') 67 | 68 | ``` 69 | 70 | ## 记录时间 71 | 72 | 您可以使用以下代码行启用日志记录时间: 73 | 74 | ```py 75 | logging.basicConfig(format='%(asctime)s %(message)s') 76 | 77 | ``` 78 | 79 | 下面的例子: 80 | 81 | ```py 82 | import logging 83 | 84 | logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG) 85 | logging.info('Logging app started') 86 | logging.warning('An example logging message.') 87 | logging.warning('Another log message') 88 | 89 | ``` 90 | 91 | 输出: 92 | 93 | ```py 94 | 2015-06-25 23:24:01,153 Logging app started 95 | 2015-06-25 23:24:01,153 An example message. 96 | 2015-06-25 23:24:01,153 Another message 97 | 98 | ``` -------------------------------------------------------------------------------- /docs/17.md: -------------------------------------------------------------------------------- 1 | # 随机数 2 | 3 | > 原文: [https://pythonspot.com/random-numbers/](https://pythonspot.com/random-numbers/) 4 | 5 | 使用`random`模块,我们可以生成伪随机数。 函数`random()`生成一个介于零和一之间的随机数`[0, 0.1 .. 1]`。 用此模块生成的数字不是真正随机的,但对于大多数用途而言,它们是足够随机的。 6 | 7 | ## 介于 0 和 1 之间的随机数。 8 | 9 | 我们可以使用以下小代码生成(伪)随机浮点​​数: 10 | 11 | ```py 12 | from random import * 13 | 14 | print(random()) # Generate a pseudo-random number between 0 and 1. 15 | 16 | ``` 17 | 18 | ## 生成一个 1 到 100 之间的随机数 19 | 20 | 要生成一个介于一百到一百之间的整数(整数),请使用: 21 | 22 | ```py 23 | from random import * 24 | 25 | print(randint(1, 100)) # Pick a random number between 1 and 100. 26 | 27 | ``` 28 | 29 | 这将打印一个随机整数。 如果要将其存储在变量中,可以使用: 30 | 31 | ```py 32 | from random import * 33 | 34 | x = randint(1, 100) # Pick a random number between 1 and 100. 35 | print(x) 36 | 37 | ``` 38 | 39 | ## 1 到 10 之间的随机数 40 | 41 | 要生成 1 到 10 之间的随机浮点数,您可以使用`uniform()`函数 42 | 43 | ```py 44 | from random import * 45 | 46 | print(uniform(1, 10)) 47 | 48 | ``` 49 | 50 | 从列表中选择一个随机项目 51 | 52 | ## 打乱列表 53 | 54 | 我们可以使用以下代码对列表进行随机排列: 55 | 56 | ```py 57 | from random import * 58 | 59 | items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 60 | shuffle(items) 61 | print(items) 62 | 63 | ``` 64 | 65 | 要从列表中选择一个随机数: 66 | 67 | ```py 68 | from random import * 69 | 70 | items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 71 | 72 | x = sample(items, 1) # Pick a random item from the list 73 | print(x[0]) 74 | 75 | y = sample(items, 4) # Pick 4 random items from the list 76 | print(y) 77 | 78 | ``` 79 | 80 | 我们可以使用字符串列表来做同样的事情: 81 | 82 | ```py 83 | from random import * 84 | 85 | items = ['Alissa','Alice','Marco','Melissa','Sandra','Steve'] 86 | 87 | x = sample(items, 1) # Pick a random item from the list 88 | print(x[0]) 89 | 90 | y = sample(items, 4) # Pick 4 random items from the list 91 | print(y) 92 | 93 | ``` 94 | 95 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | .DS_Store 103 | 104 | # gitbook 105 | _book 106 | 107 | # node.js 108 | node_modules 109 | 110 | # windows 111 | Thumbs.db 112 | 113 | # word 114 | ~$*.docx 115 | ~$*.doc 116 | -------------------------------------------------------------------------------- /docs/50.md: -------------------------------------------------------------------------------- 1 | {% raw %} 2 | 3 | # Jinja2 模板引擎 4 | 5 | > 原文: [https://pythonspot.com/jinja2-template-engine/](https://pythonspot.com/jinja2-template-engine/) 6 | 7 | Jinja2 是 Python 的模板引擎。 将数据呈现到网页时,可以使用它。 对于您访问的每个链接,您都希望使用格式显示数据。 通过使用模板引擎,我们可以将显示逻辑(html,css)与实际的 Python 代码分开。 让我们从一个例子开始 8 | 9 | ## 关于 Jinja 10 | 11 | Jinja2 模板只是一个文本文件,不需要特定的扩展名,例如`.html`,`.xml`。模板可能包含标签和特殊定界符: 12 | 13 | | 定界符 | 用法 | 14 | | --- | --- | 15 | | `{% ... %}` | 语句 | 16 | | `{{ ... }}` | 要打印到模板输出的表达式 | 17 | | `{# ... #}` | 注释未包含在模板输出中 | 18 | | `# ... #` | 行语句 | 19 | 20 | 在上面的示例中,我们有两个语句和一个表达式。 我们还没有包含任何注释。 21 | 22 | ## 基本模板和子模板 23 | 24 | Jinja2 模板可以扩展基本模板。 在包含许多站点的网页上,您可能希望这些页面看起来相似。 在`/templates/`中,使用以下代码创建一个名为`base.html`的文件: 25 | 26 | ```py 27 | 28 | {% block head %} 29 | 30 | {% title> 31 | {% endblock %} 32 | {% div id="content"> 33 | 37 | 38 | ``` 39 | 40 | 我们没有设置`style.css`,但是您可以设置一个。将`/templates/user.html`更改为: 41 | 42 | ```py 43 | {% extends "base.html" %} 44 | {% block title %}Index{% endblock %} 45 | {% block head %} 46 | {{ super() }} 47 | 50 | 51 | {% endblock %} 52 | {% block content %} 53 |

Users

54 |

55 | 56 |
    57 | {% for user in users %} 58 |
  • {{ user }}
  • 59 | {% endfor %}
60 | {% endblock %} 61 | 62 | ``` 63 | 64 | 通过以下方式重新启动应用程序: 65 | 66 | ```py 67 | python app.py 68 | * Running on http://0.0.0.0:8080/ 69 | 70 | ``` 71 | 72 | 输出: 73 | 74 | ![template jinja](img/b183ab9d09b4460a2626a0004e1f1b00.jpg) 75 | 76 | Flask Jinja 模板引擎 77 | 78 | [下载 Flask 示例](https://pythonspot.com/download-flask-examples/) 79 | 80 | {% endraw %} -------------------------------------------------------------------------------- /docs/228.md: -------------------------------------------------------------------------------- 1 | # Tk 菜单栏 2 | 3 | > 原文: [https://pythonspot.com/tk-menubar/](https://pythonspot.com/tk-menubar/) 4 | 5 | Tkinter 工具箱包含所有用于创建图形应用程序的基本小部件。 几乎每个应用程序都有一个主菜单。 与预期的一样,Tkinter 支持将主菜单添加到您的应用程序窗口。 6 | 7 | 下面的屏幕截图演示了基于 Tkinter 的菜单: 8 | 9 | ![tk menu](img/ec69b97f82c9ef2d0bac39c941f21ed9.jpg) 10 | 11 | Tkinter 菜单 12 | 13 | ## Tkinter 菜单栏 14 | 15 | 您可以使用以下代码通过 [Tkinter](https://pythonspot.com/tkinter/) 创建一个简单菜单。 每个选项(新建,打开,保存..)都应具有自己的回调。 16 | 17 | ```py 18 | from Tkinter import * 19 | 20 | def donothing(): 21 | x = 0 22 | 23 | root = Tk() 24 | 25 | menubar = Menu(root) 26 | filemenu = Menu(menubar, tearoff=0) 27 | filemenu.add_command(label="New", command=donothing) 28 | filemenu.add_command(label="Open", command=donothing) 29 | filemenu.add_command(label="Save", command=donothing) 30 | filemenu.add_separator() 31 | filemenu.add_command(label="Exit", command=root.quit) 32 | menubar.add_cascade(label="File", menu=filemenu) 33 | 34 | helpmenu = Menu(menubar, tearoff=0) 35 | helpmenu.add_command(label="Help Index", command=donothing) 36 | helpmenu.add_command(label="About...", command=donothing) 37 | menubar.add_cascade(label="Help", menu=helpmenu) 38 | 39 | root.config(menu=menubar) 40 | root.mainloop() 41 | 42 | ``` 43 | 44 | 我们通过调用创建菜单栏: 45 | 46 | ```py 47 | menubar = Menu(root) 48 | 49 | ``` 50 | 51 | 其中`root`是`Tk()`对象。 52 | 53 | 菜单栏可能包含零个或多个子菜单,例如文件菜单,编辑菜单,视图菜单,工具菜单等。 54 | 55 | 可以使用相同的`Menu()`调用创建子菜单,其中第一个参数是要附加到的菜单栏。 56 | 57 | ```py 58 | filemenu = Menu(menubar, tearoff=0) 59 | menu = Menu(menubar, tearoff=0) 60 | 61 | ``` 62 | 63 | 可以使用`add_command()`方法将各个选项添加到这些子菜单中: 64 | 65 | ```py 66 | filemenu.add_command(label="New", command=donothing) 67 | filemenu.add_command(label="Open", command=donothing) 68 | filemenu.add_command(label="Save", command=donothing) 69 | 70 | ``` 71 | 72 | 在该示例中,我们创建了回调函数`donothing()`并将每个命令链接到它以简化操作。 使用`add_comment()`函数添加一个选项。 我们调用`add_cascade()`将此菜单列表添加到特定列表。 73 | 74 | [下载 tkinter 示例](/download-tkinter-examples) -------------------------------------------------------------------------------- /asset/prism-python.min.js: -------------------------------------------------------------------------------- 1 | Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; -------------------------------------------------------------------------------- /docs/32.md: -------------------------------------------------------------------------------- 1 | # `threading`和`_thread` 2 | 3 | > 原文: [https://pythonspot.com/threading](https://pythonspot.com/threading) 4 | 5 | 在 Python 中,您可以使用 Python 2.x 中的`threading`模块或 Python 3 中的`_thread`模块创建线程。我们将使用`threading`模块与之交互。 6 | 7 | 线程是一种操作系统进程,具有与正常进程不同的功能: 8 | 9 | * 线程作为进程的子集存在 10 | * 线程共享内存和资源 11 | * 进程具有不同的地址空间(在内存中) 12 | 13 | 什么时候使用线程处理? 通常,当您希望功能与程序同时出现时。 如果创建服务器软件,则希望服务器不仅侦听一个连接,而且侦听许多连接。 简而言之,线程使程序能够一次执行多个任务。 14 | 15 | ## Python 线程 16 | 17 | 让我们创建一个线程程序。 在此程序中,我们将启动 10 个线程,每个线程将输出其 ID。 18 | 19 | ```py 20 | import threading 21 | 22 | # Our thread class 23 | class MyThread (threading.Thread): 24 | 25 | def __init__(self,x): 26 | self.__x = x 27 | threading.Thread.__init__(self) 28 | 29 | def run (self): 30 | print str(self.__x) 31 | 32 | # Start 10 threads. 33 | for x in xrange(10): 34 | MyThread(x).start() 35 | 36 | ``` 37 | 38 | 输出: 39 | 40 | ```py 41 | 0 42 | 1 43 | ... 44 | 9 45 | 46 | ``` 47 | 48 | 如果运行一次,线程不必停止。 线程可以是定时的,每`x`秒重复执行一次线程功能。 49 | 50 | ## 定时线程 51 | 52 | 在 Python 中,`Timer`类是`Thread`类的子类。 这意味着它的行为类似。我们可以使用计时器类来创建定时线程。计时器是通过`.start()`方法调用启动的,就像常规线程一样。 下面的程序创建一个线程,该线程在 5 秒钟后启动。 53 | 54 | ```py 55 | #!/usr/bin/env python 56 | from threading import * 57 | 58 | def hello(): 59 | print "hello, world" 60 | 61 | # create thread 62 | t = Timer(10.0, hello) 63 | 64 | # start thread after 10 seconds 65 | t.start() 66 | 67 | ``` 68 | 69 | ## 使用线程 70 | 71 | 72 | 重复执行功能我们可以像这样无休止地执行线程: 73 | 74 | ```py 75 | #!/usr/bin/env python 76 | from threading import * 77 | import time 78 | 79 | def handleClient1(): 80 | while(True): 81 | print "Waiting for client 1..." 82 | time.sleep(5) # wait 5 seconds 83 | 84 | def handleClient2(): 85 | while(True): 86 | print "Waiting for client 2..." 87 | time.sleep(5) # wait 5 seconds 88 | 89 | # create threads 90 | t = Timer(5.0, handleClient1) 91 | t2 = Timer(3.0, handleClient2) 92 | 93 | # start threads 94 | t.start() 95 | t2.start() 96 | 97 | ``` -------------------------------------------------------------------------------- /asset/docsify-apachecn-footer.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var cnzzId = window.$docsify.cnzzId 3 | var unRepo = window.$docsify.repo || '' 4 | var [un, repo] = unRepo.split('/') 5 | var footer = ` 6 |
7 |
8 |

我们一直在努力

9 |

${unRepo}

10 |

11 | 12 | 13 | iBooker 面试求职

14 |

15 |
16 | 20 |
21 |
22 | ` 23 | var plugin = function(hook) { 24 | hook.afterEach(function(html) { 25 | return html + footer 26 | }) 27 | hook.doneEach(function() { 28 | (adsbygoogle = window.adsbygoogle || []).push({}) 29 | }) 30 | } 31 | var plugins = window.$docsify.plugins || [] 32 | plugins.push(plugin) 33 | window.$docsify.plugins = plugins 34 | })() -------------------------------------------------------------------------------- /docs/62.md: -------------------------------------------------------------------------------- 1 | # 创建一个 gmail 词云 2 | 3 | > 原文: [https://pythonspot.com/creating-a-gmail-wordcloud/](https://pythonspot.com/creating-a-gmail-wordcloud/) 4 | 5 | ![wordcloud python](img/9bd0f09416c906b80796a1f54cff8df4.jpg) 6 | 7 | 基于 gmail 的词云 8 | 9 | 我们创建了一个 python 程序,该程序**根据您的 gmail** 帐户生成一个词云。 输出内容可能看起来像这样,具体取决于您电子邮件的内容。 10 | 11 | 首先,您将需要一个与 gmail 服务进行交互的小脚本。 我们创建了一个与 gmail 交互的小脚本。 它依赖于已安装的 [gmaillib](https://github.com/thedjpetersen/gmaillib) ,您需要进行以下设置:允许“不太安全”的应用程序访问 gmail 服务器: [https://www.google.com/settings/security/lesssecureapps](https://www.google.com/settings/security/lesssecureapps) 12 | 13 | ## Gmail 示例: 14 | 15 | 16 | ```py 17 | #!/usr/bin/env python 18 | import gmaillib 19 | from collections import Counter 20 | 21 | def getMails(cnt,account, start,amount): 22 | emails = account.inbox(start, amount) 23 | 24 | for email in emails: 25 | cnt[email.sender_addr] += 1 26 | 27 | amountOfMails = 100 28 | cnt = Counter() 29 | username = raw_input("Gmail account: ") 30 | password = raw_input("Password: ") 31 | 32 | account = gmaillib.account(username, password) 33 | 34 | getMails(cnt,account,0,amountOfMails) 35 | print(cnt) 36 | 37 | ``` 38 | 39 | 如果此脚本成功运行,则说明您已安装了几乎所有要求。 您还将需要名为[`wordcloud`](https://github.com/amueller/word_cloud)的库。 我们重建系统,以便得到一个包含消息主体的长字符串,并将其作为输入输入到`wordcloud`实例中。 可变数量包含要提取的邮件数。 我们已将其设置为 100,但您可以使用`get_inbox_count()`将其设置为所有邮件,也可以仅提取上周的所有电子邮件。 40 | 41 | ## 最终程序: 42 | 43 | 44 | ```py 45 | #!/usr/bin/env python 46 | import gmaillib 47 | from collections import Counter 48 | from wordcloud import WordCloud 49 | import matplotlib.pyplot as plt 50 | 51 | amount = 100 52 | cnt = Counter() 53 | username = raw_input("Gmail account: ") 54 | password = raw_input("Password: ") 55 | 56 | account = gmaillib.account(username, password) 57 | 58 | emails = account.inbox(0, amount) 59 | 60 | data = "" 61 | for email in emails: 62 | data = data + str(email.body) 63 | 64 | wordcloud = WordCloud().generate(data) 65 | plt.imshow(wordcloud) 66 | plt.axis("off") 67 | plt.show() 68 | 69 | ``` -------------------------------------------------------------------------------- /docs/79.md: -------------------------------------------------------------------------------- 1 | # 从网页中提取链接(`BeautifulSoup`) 2 | 3 | > 原文: [https://pythonspot.com/extract-links-from-webpage-beautifulsoup/](https://pythonspot.com/extract-links-from-webpage-beautifulsoup/) 4 | 5 | Web 抓取是从网站提取数据的技术。 6 | 7 | 模块`BeautifulSoup`设计用于[**网页**](https://pythonspot.com/web-dev)抓取。`BeautifulSoup`模块可以处理 HTML 和 XML。 它提供了用于搜索,导航和修改分析树的简单方法。 8 | 9 | ## 从网站获取链接 10 | 11 | 下面的示例在网页上打印所有链接: 12 | 13 | ```py 14 | 15 | from BeautifulSoup import BeautifulSoup 16 | import urllib2 17 | import re 18 | 19 | html_page = urllib2.urlopen("https://arstechnica.com") 20 | soup = BeautifulSoup(html_page) 21 | for link in soup.findAll('a', attrs={'href': re.compile("^http://")}): 22 | print link.get('href') 23 | 24 | ``` 25 | 26 | 它下载带有行的原始 html 代码: 27 | 28 | ```py 29 | 30 | html_page = urllib2.urlopen("https://arstechnica.com") 31 | 32 | ``` 33 | 34 | 创建了`BeautifulSoup`对象,我们使用该对象查找所有链接: 35 | 36 | ```py 37 | 38 | soup = BeautifulSoup(html_page) 39 | for link in soup.findAll('a', attrs={'href': re.compile("^http://")}): 40 | print link.get('href') 41 | 42 | ``` 43 | 44 | ## 将网站链接提取到数组中 45 | 46 | 要将链接存储在[数组](https://pythonspot.com/python-lists/)中,可以使用: 47 | 48 | ```py 49 | 50 | from BeautifulSoup import BeautifulSoup 51 | import urllib2 52 | import re 53 | 54 | html_page = urllib2.urlopen("https://arstechnica.com") 55 | soup = BeautifulSoup(html_page) 56 | links = [] 57 | 58 | for link in soup.findAll('a', attrs={'href': re.compile("^http://")}): 59 | links.append(link.get('href')) 60 | 61 | print(links) 62 | 63 | ``` 64 | 65 | ## 从网页提取链接的函数 66 | 67 | 如果您反复提取链接,则可以使用以下函数: 68 | 69 | ```py 70 | 71 | from BeautifulSoup import BeautifulSoup 72 | import urllib2 73 | import re 74 | 75 | def getLinks(url): 76 | html_page = urllib2.urlopen(url) 77 | soup = BeautifulSoup(html_page) 78 | links = [] 79 | 80 | for link in soup.findAll('a', attrs={'href': re.compile("^http://")}): 81 | links.append(link.get('href')) 82 | 83 | return links 84 | 85 | print( getLinks("https://arstechnica.com") ) 86 | 87 | ``` 88 | -------------------------------------------------------------------------------- /docs/99.md: -------------------------------------------------------------------------------- 1 | # 图像数据和操作 2 | 3 | > 原文: [https://pythonspot.com/image-data-and-operations/](https://pythonspot.com/image-data-and-operations/) 4 | 5 | OpenCV(`cv2`)可用于从图像中提取数据并对其进行操作。 我们在下面演示一些示例: 6 | 7 | ## 图像属性 8 | 9 | 我们可以使用以下代码提取宽度,高度和颜色深度: 10 | 11 | ```py 12 | import cv2 13 | import numpy as np 14 | 15 | # read image into matrix. 16 | m = cv2.imread("python.png") 17 | 18 | # get image properties. 19 | h,w,bpp = np.shape(m) 20 | 21 | # print image properties. 22 | print "width: " + str(w) 23 | print "height: " + str(h) 24 | print "bpp: " + str(bpp) 25 | 26 | ``` 27 | 28 | ## 访问像素数据 29 | 30 | 我们可以直接使用矩阵访问图像的像素数据,例如: 31 | 32 | ```py 33 | import cv2 34 | import numpy as np 35 | 36 | # read image into matrix. 37 | m = cv2.imread("python.png") 38 | 39 | # get image properties. 40 | h,w,bpp = np.shape(m) 41 | 42 | # print pixel value 43 | y = 1 44 | x = 1 45 | print m[y][x] 46 | 47 | ``` 48 | 49 | 要遍历图像中的所有像素,可以使用: 50 | 51 | ```py 52 | import cv2 53 | import numpy as np 54 | 55 | # read image into matrix. 56 | m = cv2.imread("python.png") 57 | 58 | # get image properties. 59 | h,w,bpp = np.shape(m) 60 | 61 | # iterate over the entire image. 62 | for py in range(0,h): 63 | for px in range(0,w): 64 | print m[py][px] 65 | 66 | ``` 67 | 68 | ## 图像处理 69 | 70 | 您可以直接修改像素和像素通道(`r, g, b`)。 在下面的示例中,我们删除了一个颜色通道: 71 | 72 | ```py 73 | import cv2 74 | import numpy as np 75 | 76 | # read image into matrix. 77 | m = cv2.imread("python.png") 78 | 79 | # get image properties. 80 | h,w,bpp = np.shape(m) 81 | 82 | # iterate over the entire image. 83 | for py in range(0,h): 84 | for px in range(0,w): 85 | m[py][px][0] = 0 86 | 87 | # display image 88 | cv2.imshow('matrix', m) 89 | cv2.waitKey(0) 90 | 91 | ``` 92 | 93 | 要更改整个图像,您必须更改所有通道:`m[py][px][0]`,`m[py][px][1]`,`m[py][px][2]`。 94 | 95 | ## 保存图像 96 | 97 | 您可以使用以下方法将修改后的图像保存到磁盘: 98 | 99 | ```py 100 | cv2.imwrite('filename.png',m) 101 | 102 | ``` 103 | 104 | [下载计算机视觉示例和课程](https://pythonspot.com/download-vision-examples/) -------------------------------------------------------------------------------- /docs/215.md: -------------------------------------------------------------------------------- 1 | # Qt4 按钮 2 | 3 | > 原文: [https://pythonspot.com/qt4-buttons/](https://pythonspot.com/qt4-buttons/) 4 | 5 | ![PyQt4 button example](img/3911a344ee61b701979eb5a2de2c4e27.jpg) 6 | 7 | PyQt4 按钮示例 8 | 9 | PyQt4(Qt4)通过 QPushButton 小部件支持按钮。 10 | 11 | 我们扩展代码以在窗口中心显示一个按钮。 12 | 13 | 如果将鼠标悬停在该按钮上将显示一个工具提示,按下该按钮将关闭程序。 14 | 15 | ## PyQt4 按钮示例 16 | 17 | 下面的示例在 PyQt4 窗口中添加了一个按钮。 18 | 19 | ```py 20 | #! /usr/bin/env python 21 | # -*- coding: utf-8 -*- 22 | # 23 | import sys 24 | from PyQt4.QtGui import * 25 | 26 | # Create an PyQT4 application object. 27 | a = QApplication(sys.argv) 28 | 29 | # The QWidget widget is the base class of all user interface objects in PyQt4. 30 | w = QWidget() 31 | 32 | # Set window size. 33 | w.resize(320, 240) 34 | 35 | # Set window title 36 | w.setWindowTitle("Hello World!") 37 | 38 | # Add a button 39 | btn = QPushButton('Hello World!', w) 40 | btn.setToolTip('Click to quit!') 41 | btn.clicked.connect(exit) 42 | btn.resize(btn.sizeHint()) 43 | btn.move(100, 80) 44 | 45 | # Show window 46 | w.show() 47 | 48 | sys.exit(a.exec_()) 49 | 50 | ``` 51 | 52 | ## PyQt4 信号和槽 53 | 54 | 单击按钮应该可以执行某些操作。 为此,您必须使用信号和槽。 55 | 56 | 如果用户执行诸如单击按钮,在框中键入文本之类的操作,则小部件会发出信号。 信号可以与一个槽相连,该槽充当接收器并对其起作用。 57 | 58 | ```py 59 | import sys 60 | from PyQt4.QtCore import pyqtSlot 61 | from PyQt4.QtGui import * 62 | 63 | # create our window 64 | app = QApplication(sys.argv) 65 | w = QWidget() 66 | w.setWindowTitle('Button click example @pythonspot.com') 67 | 68 | # Create a button in the window 69 | btn = QPushButton('Click me', w) 70 | 71 | # Create the actions 72 | @pyqtSlot() 73 | def on_click(): 74 | print('clicked') 75 | 76 | @pyqtSlot() 77 | def on_press(): 78 | print('pressed') 79 | 80 | @pyqtSlot() 81 | def on_release(): 82 | print('released') 83 | 84 | # connect the signals to the slots 85 | btn.clicked.connect(on_click) 86 | btn.pressed.connect(on_press) 87 | btn.released.connect(on_release) 88 | 89 | # Show the window and run the app 90 | w.show() 91 | app.exec_() 92 | 93 | ``` 94 | 95 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/232.md: -------------------------------------------------------------------------------- 1 | # Tk 下拉示例 2 | 3 | > 原文: [https://pythonspot.com/tk-dropdown-example/](https://pythonspot.com/tk-dropdown-example/) 4 | 5 | [Tkinter](https://pythonspot.com/tkinter/) 支持下拉菜单。 这类似于操作系统上的标准组合框。 6 | 7 | 该小部件称为`OptionMenu`,所需的参数为:帧,tk 变量和带有选择项的字典。 8 | 9 | ![tk dropdown menu](img/19e10ff770d93deeffd983bf09f95bdc.jpg) 10 | 11 | ## Tkinter 下拉示例 12 | 13 | 下面的示例创建一个带有组合框的 Tkinter 窗口。 14 | 15 | ```py 16 | from Tkinter import * 17 | import Tkinter as ttk 18 | from ttk import * 19 | 20 | root = Tk() 21 | root.title("Tk dropdown example") 22 | 23 | # Add a grid 24 | mainframe = Frame(root) 25 | mainframe.grid(column=0,row=0, sticky=(N,W,E,S) ) 26 | mainframe.columnconfigure(0, weight = 1) 27 | mainframe.rowconfigure(0, weight = 1) 28 | mainframe.pack(pady = 100, padx = 100) 29 | 30 | # Create a Tkinter variable 31 | tkvar = StringVar(root) 32 | 33 | # Dictionary with options 34 | choices = { 'Pizza','Lasagne','Fries','Fish','Potatoe'} 35 | tkvar.set('Pizza') # set the default option 36 | 37 | popupMenu = OptionMenu(mainframe, tkvar, *choices) 38 | Label(mainframe, text="Choose a dish").grid(row = 1, column = 1) 39 | popupMenu.grid(row = 2, column =1) 40 | 41 | # on change dropdown value 42 | def change_dropdown(*args): 43 | print( tkvar.get() ) 44 | 45 | # link function to change dropdown 46 | tkvar.trace('w', change_dropdown) 47 | 48 | root.mainloop() 49 | 50 | ``` 51 | 52 | 首先创建一个 Tk 对象,并将其传递给使用`Frame()`创建的 tkinter 框架 53 | 54 | ```py 55 | root = Tk() 56 | root.title("Tk dropdown example") 57 | mainframe = Frame(root) 58 | 59 | ``` 60 | 61 | 将一个网格添加到框架,该框架将容纳组合框。 62 | 63 | ```py 64 | mainframe.grid(column=0,row=0, sticky=(N,W,E,S) ) 65 | mainframe.columnconfigure(0, weight = 1) 66 | mainframe.rowconfigure(0, weight = 1) 67 | mainframe.pack(pady = 100, padx = 100) 68 | 69 | ``` 70 | 71 | 弹出菜单包含在变量选项中定义的选项列表。 使用以下行创建一个 Tkinter 变量: 72 | 73 | ```py 74 | tkvar = StringVar(root) 75 | 76 | ``` 77 | 78 | 变量的默认值是使用`.set()`方法设置的。 我们使用以下方法创建 Tkinter 组合框: 79 | 80 | ```py 81 | popupMenu = OptionMenu(mainframe, tkvar, *choices) 82 | 83 | ``` 84 | 85 | 并将回调方法`change_dropdown`链接到此组合框。 -------------------------------------------------------------------------------- /docs/94.md: -------------------------------------------------------------------------------- 1 | # python 语音引擎教程 2 | 3 | > 原文: [https://pythonspot.com/speech-engines-with-python-tutorial/](https://pythonspot.com/speech-engines-with-python-tutorial/) 4 | 5 | ![Text To Speech (TTS)](/wp-content/uploads/2016/07/tts.png) 6 | 7 | 文本到语音(TTS) 8 | 9 | 用于创建人工语音的计算机系统称为语音合成器,可以在软件或硬件产品中实现。 10 | 11 | **文本到语音(TTS)**系统将普通语言文本转换为语音。 我们如何在 Python 中使用语音合成? 12 | 13 | 14 | ## Pyttsx 15 | 16 | [Pyttsx](https://pypi.python.org/pypi/pyTTS/3.0) 是一个跨平台(Mac OSX,Windows 和 Linux)的语音库。 您可以设置语音元数据,例如年龄,性别,ID,语言和姓名。 您的语音引擎带有大量语音。 17 | 18 | 文字转语音样本: 19 | 20 | 21 | 22 | 安装方式: 23 | 24 | ```py 25 | 26 | sudo pip install pyttsx 27 | 28 | ``` 29 | 30 | 创建代码`Speech1.py` 31 | 32 | ```py 33 | 34 | import pyttsx 35 | engine = pyttsx.init() 36 | engine.say('The quick brown fox jumped over the lazy dog.') 37 | engine.runAndWait() 38 | 39 | ``` 40 | 41 | 并使用 python 执行它。 42 | 43 | ## eSpeak 44 | 45 | [eSpeak](https://espeak.sourceforge.net/) 是一款适用于 Linux 和 Windows 的紧凑型开源软件语音合成器,适用于英语和其他语言。 46 | 47 | 文字转语音样本: 48 | 49 | 50 | 51 | 我们可以使用以下方法进行安装: 52 | 53 | ```py 54 | 55 | sudo apt-get install espeak 56 | 57 | ``` 58 | 59 | 创建代码`Speech2.py`: 60 | 61 | ```py 62 | 63 | import os 64 | os.system("espeak 'The quick brown fox'") 65 | 66 | ``` 67 | 68 | 它非常易于使用,但是像 pyttsx 一样听起来很机器人。 69 | 70 | ## gTTS 71 | 72 | [**gtts 模块不再起作用**](https://stackoverflow.com/questions/9893175/google-text-to-speech-api)。 73 | 74 | [我在 Github 上找到了一个使用 Google 语音引擎的脚本](https://github.com/pndurette/gTTS)。 该脚本带有许多选项,并且不会说话,而是保存为 mp3。 我们添加了一个命令来自动播放 mp3: 75 | 76 | ```py 77 | 78 | os.system("mpg321 out.mp3 -quiet") 79 | 80 | ``` 81 | 82 | 运行: 83 | 84 | ```py 85 | 86 | python gtts.py -s 'Python programming example' 87 | 88 | ``` 89 | 90 | 声音非常自然。 唯一的缺点是,运行此脚本时需要与互联网连接。 91 | 92 | ## 链接 93 | 94 | 你可能会喜欢: 95 | 96 | * [Jarvis 和 Python](https://pythonspot.com/personal-assistant-jarvis-in-python/) 97 | 98 | * [使用 Google Speech API](https://pythonspot.com/speech-recognition-using-google-speech-api/) 的语音识别 -------------------------------------------------------------------------------- /docs/76.md: -------------------------------------------------------------------------------- 1 | # Python 中的 FTP 客户端 2 | 3 | > 原文: [https://pythonspot.com/ftp-client-in-python/](https://pythonspot.com/ftp-client-in-python/) 4 | 5 | 本文将从客户端的角度向您展示如何在 Python 中使用文件传输协议(FTP)。 我们使用`ftplib`,这是一个实现 FTP 协议的库。 使用 FTP,我们可以通过函数调用创建和访问远程文件。 6 | 7 | ## 目录列表 8 | 9 | 我们可以使用这个小片段列出根目录: 10 | 11 | ```py 12 | import ftplib 13 | 14 | ftp = ftplib.FTP("ftp.nluug.nl") 15 | ftp.login("anonymous", "ftplib-example-1") 16 | 17 | data = [] 18 | 19 | ftp.dir(data.append) 20 | 21 | ftp.quit() 22 | 23 | for line in data: 24 | print "-", line 25 | 26 | ``` 27 | 28 | 这将输出目录内容。 以简单的控制台样式输出。 如果要显示特定目录,则必须在连接`ftp.cwd('/')`函数后更改目录,其中参数是您要更改的目录。 29 | 30 | ```py 31 | import ftplib 32 | 33 | ftp = ftplib.FTP("ftp.nluug.nl") 34 | ftp.login("anonymous", "ftplib-example-1") 35 | 36 | data = [] 37 | 38 | ftp.cwd('/pub/') # change directory to /pub/ 39 | ftp.dir(data.append) 40 | 41 | ftp.quit() 42 | 43 | for line in data: 44 | print "-", line 45 | 46 | ``` 47 | 48 | ## 下载文件 49 | 50 | 要下载文件,我们使用`retrbinary()`函数。 下面的例子: 51 | 52 | ```py 53 | import ftplib 54 | import sys 55 | 56 | def getFile(ftp, filename): 57 | try: 58 | ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write) 59 | except: 60 | print "Error" 61 | 62 | ftp = ftplib.FTP("ftp.nluug.nl") 63 | ftp.login("anonymous", "ftplib-example-1") 64 | 65 | ftp.cwd('/pub/') # change directory to /pub/ 66 | getFile(ftp,'README.nluug') 67 | 68 | ftp.quit() 69 | 70 | ``` 71 | 72 | ## 上传文件 73 | 74 | 我们可以使用`storlines()`命令上传文件。 这将在主目录中上传文件`README.nluug`。 如果要在另一个目录中上传,请与`cwd()`函数结合使用。 75 | 76 | ```py 77 | import ftplib 78 | import os 79 | 80 | def upload(ftp, file): 81 | ext = os.path.splitext(file)[1] 82 | if ext in (".txt", ".htm", ".html"): 83 | ftp.storlines("STOR " + file, open(file)) 84 | else: 85 | ftp.storbinary("STOR " + file, open(file, "rb"), 1024) 86 | 87 | ftp = ftplib.FTP("127.0.0.1") 88 | ftp.login("username", "password") 89 | 90 | upload(ftp, "README.nluug") 91 | 92 | ``` 93 | 94 | ## 其他函数 95 | 96 | 有关其他函数,请参考[官方库文档](https://docs.python.org/3/library/ftplib.html#)。 -------------------------------------------------------------------------------- /docs/234.md: -------------------------------------------------------------------------------- 1 | # wxPython 按钮 2 | 3 | > 原文: [https://pythonspot.com/wxpython-buttons/](https://pythonspot.com/wxpython-buttons/) 4 | 5 | 要创建按钮,只需调用`wx.Button()`。 使用`wx.Button()`创建按钮时,将面板解析为第一个参数很重要。 我们将其附加到面板上,因为将其附加到框架上将使其全屏显示。 6 | 7 | 面板使您可以选择将小部件放置在窗口中的任何位置。 参数`(10, 10)`是面板上的位置。`id`参数是必需的,但它等于`-1`(`wx.ID_ANY == -1`)。 第三个参数是按钮上的文本。 8 | 9 | 您可以使用下面的代码在 [wxPython](https://pythonspot.com/wx/) 中创建一个按钮: 10 | 11 | ```py 12 | #!/usr/bin/python 13 | 14 | import wx 15 | 16 | def onButton(event): 17 | print "Button pressed." 18 | 19 | app = wx.App() 20 | frame = wx.Frame(None, -1, 'win.py') 21 | frame.SetDimensions(0,0,200,50) 22 | 23 | panel = wx.Panel(frame, wx.ID_ANY) 24 | button = wx.Button(panel, wx.ID_ANY, 'Test', (10, 10)) 25 | button.Bind(wx.EVT_BUTTON, onButton) 26 | 27 | frame.Show() 28 | frame.Centre() 29 | app.MainLoop() 30 | 31 | ``` 32 | 33 | 如果按下按钮,则调用`onButton()`函数。 我们将其与`button.Bind(wx.EVT_BUTTON, onButton)`绑定(连接)。 34 | 35 | 输出: 36 | 37 | ![wx button](img/63f4d90dfe1598c08abff7ee025b9a0b.jpg) 38 | 39 | 使用 [wxPython](https://pythonspot.com/wx/) 创建的按钮 40 | 41 | ## 按钮上的图像 42 | 43 | wxPython 支持在按钮上使用图像。 只需稍作更改即可在按钮上显示图像。 虽然该函数称为`wx.BitmapButton`,但它支持其他图像格式。 44 | 45 | ```py 46 | bmp = wx.Bitmap("call-start.png", wx.BITMAP_TYPE_ANY) 47 | button = wx.BitmapButton(panel, id=wx.ID_ANY, bitmap=bmp, 48 | size=(bmp.GetWidth()+10, bmp.GetHeight()+10)) 49 | 50 | ``` 51 | 52 | 第一行加载图像,第二行创建按钮。 53 | 54 | 完整代码: 55 | 56 | ```py 57 | #!/usr/bin/python 58 | 59 | import wx 60 | 61 | def onButton(event): 62 | print "Button pressed." 63 | 64 | app = wx.App() 65 | frame = wx.Frame(None, -1, 'win.py') 66 | frame.SetDimensions(0,0,200,70) 67 | panel = wx.Panel(frame, wx.ID_ANY) 68 | 69 | bmp = wx.Bitmap("call-start.png", wx.BITMAP_TYPE_ANY) 70 | button = wx.BitmapButton(panel, id=wx.ID_ANY, bitmap=bmp, 71 | size=(bmp.GetWidth()+10, bmp.GetHeight()+10)) 72 | 73 | button.Bind(wx.EVT_BUTTON, onButton) 74 | button.SetPosition((10,10)) 75 | 76 | frame.Show() 77 | frame.Centre() 78 | app.MainLoop() 79 | 80 | ``` 81 | 82 | 输出: 83 | 84 | ![wxButton](img/67a209e3d95dcfc3bcf10be8ee22a065.jpg) 85 | 86 | `wxButton` -------------------------------------------------------------------------------- /docs/19.md: -------------------------------------------------------------------------------- 1 | # 读取文件 2 | 3 | > 原文: [https://pythonspot.com/read-file/](https://pythonspot.com/read-file/) 4 | 5 | 您之前已经看过各种类型的数据持有者:整数,字符串,列表。 但是到目前为止,我们还没有讨论如何读取或写入文件。 6 | 7 | ## 读取文件 8 | 9 | 您可以使用以下代码读取文件。 10 | 11 | 该文件必须与程序位于同一目录中,如果不是,则需要指定路径。 12 | 13 | ```py 14 | #!/usr/bin/env python 15 | 16 | # Define a filename. 17 | filename = "bestand.py" 18 | 19 | # Open the file as f. 20 | # The function readlines() reads the file. 21 | with open(filename) as f: 22 | content = f.readlines() 23 | 24 | # Show the file contents line by line. 25 | # We added the comma to print single newlines and not double newlines. 26 | # This is because the lines contain the newline character '\n'. 27 | for line in content: 28 | print(line), 29 | 30 | ``` 31 | 32 | 代码的第一部分将读取文件内容。 读取的所有行将存储在变量内容中。 第二部分将遍历变量内容中的每一行。 33 | 34 | 如果您不想读取换行符`"\n"`,则可以将语句`f.readlines()`更改为此: 35 | 36 | ```py 37 | content = f.read().splitlines() 38 | 39 | ``` 40 | 41 | 产生此代码: 42 | 43 | ```py 44 | #!/usr/bin/env python 45 | 46 | # Define a filename. 47 | filename = "bestand.py" 48 | 49 | # Open the file as f. 50 | # The function readlines() reads the file. 51 | with open(filename) as f: 52 | content = f.read().splitlines() 53 | 54 | # Show the file contents line by line. 55 | # We added the comma to print single newlines and not double newlines. 56 | # This is because the lines contain the newline character '\n'. 57 | for line in content: 58 | print(line) 59 | 60 | ``` 61 | 62 | 当上面的代码起作用时,我们应该始终测试要打开的文件是否存在。 我们将首先测试文件是否不存在,如果存在,它将读取文件,否则返回错误。 如下面的代码: 63 | 64 | ```py 65 | #!/usr/bin/env python 66 | import os.path 67 | 68 | # Define a filename. 69 | filename = "bestand.py" 70 | 71 | if not os.path.isfile(filename): 72 | print('File does not exist.') 73 | else: 74 | # Open the file as f. 75 | # The function readlines() reads the file. 76 | with open(filename) as f: 77 | content = f.read().splitlines() 78 | 79 | # Show the file contents line by line. 80 | # We added the comma to print single newlines and not double newlines. 81 | # This is because the lines contain the newline character '\n'. 82 | for line in content: 83 | print(line) 84 | 85 | ``` 86 | 87 | [下载 Python 练习](https://pythonspot.com/download-python-exercises/) -------------------------------------------------------------------------------- /docs/205.md: -------------------------------------------------------------------------------- 1 | # PyQt5 文本框示例 2 | 3 | > 原文: [https://pythonspot.com/pyqt5-textbox-example/](https://pythonspot.com/pyqt5-textbox-example/) 4 | 5 | 在本文中,您将学习如何在 [**PyQt5**](https://pythonspot.com/pyqt5/) 中使用文本框。 该小部件称为`QLineEdit`,并具有`setText()`来设置文本框值的方法,以及`text()`来获取值的方法。 6 | 7 | 我们可以使用`resize(width, height)`方法设置文本框的大小。 可以使用`move(x, y)`方法或使用网格布局来设置位置。 8 | 9 | ## PyQt5 文本框 10 | 11 | 创建文本框非常简单: 12 | 13 | ```py 14 | self.textbox = QLineEdit(self) 15 | self.textbox.move(20, 20) 16 | self.textbox.resize(280,40) 17 | 18 | ``` 19 | 20 | ![pyqt5-QLineEdit](img/4c1c799e1aa4d7f3a9c4b9104ff0efe2.jpg) 21 | 22 | ## PyQt5 文本框示例 23 | 24 | 下面的示例创建一个带有文本框的窗口。 25 | 26 | ```py 27 | import sys 28 | from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox 29 | from PyQt5.QtGui import QIcon 30 | from PyQt5.QtCore import pyqtSlot 31 | 32 | class App(QMainWindow): 33 | 34 | def __init__(self): 35 | super().__init__() 36 | self.title = 'PyQt5 textbox - pythonspot.com' 37 | self.left = 10 38 | self.top = 10 39 | self.width = 400 40 | self.height = 140 41 | self.initUI() 42 | 43 | def initUI(self): 44 | self.setWindowTitle(self.title) 45 | self.setGeometry(self.left, self.top, self.width, self.height) 46 | 47 | # Create textbox 48 | self.textbox = QLineEdit(self) 49 | self.textbox.move(20, 20) 50 | self.textbox.resize(280,40) 51 | 52 | # Create a button in the window 53 | self.button = QPushButton('Show text', self) 54 | self.button.move(20,80) 55 | 56 | # connect button to function on_click 57 | self.button.clicked.connect(self.on_click) 58 | self.show() 59 | 60 | @pyqtSlot() 61 | def on_click(self): 62 | textboxValue = self.textbox.text() 63 | QMessageBox.question(self, 'Message - pythonspot.com', "You typed: " + textboxValue, QMessageBox.Ok, QMessageBox.Ok) 64 | self.textbox.setText("") 65 | 66 | if __name__ == '__main__': 67 | app = QApplication(sys.argv) 68 | ex = App() 69 | sys.exit(app.exec_()) 70 | 71 | ``` 72 | 73 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/58.md: -------------------------------------------------------------------------------- 1 | # Flask 模板,SQLAlchemy 和 Bootstarp 2 | 3 | > 原文: [https://pythonspot.com/flask-boilerplate-with-bootstrap-sqlalchemy/](https://pythonspot.com/flask-boilerplate-with-bootstrap-sqlalchemy/) 4 | 5 | 在本文中,您将学习`cookiecutter`,这是一个从项目模板创建项目的命令行实用程序。 使用`cookiecutter`,您可以创建一个新的 python Flask 项目。 这类似于标准的 Flask 项目,除了使用此方法时,您将从几个完整的模板和功能列表开始。 6 | 7 | 特性 8 | 9 | * 具有入门模板的 Bootstrap 3 和 Font Awesome 4 10 | * 具有基本用户模型的 Flask-SQLAlchemy 11 | * 使用 Flask-Migrate 轻松进行数据库迁移 12 | * 带登录和注册表格的 Flask-WTForms 13 | * Flask-Login 进行身份验证 14 | * Flask-Bcrypt 用于密码哈希 15 | * 用于部署到 PaaS 的 Procfile(例如 Heroku) 16 | * pytest 和 Factory-Boy 进行测试(包括示例测试) 17 | * 一个简单的`manage.py`脚本。 18 | * 使用 Flask-Assets 缩小 CSS 和 JS 19 | * 可选的 Bower 支持前端程序包管理 20 | * 使用 Flask-Cache 进行缓存 21 | * 有用的调试工具栏 22 | * 利用最佳实践:蓝图和 Application Factory 模式 23 | 24 | 安装 Flask 依赖项: 25 | 26 | ```py 27 | sudo pip install flask_script 28 | sudo pip install flask_migrate 29 | sudo pip install flask_assets 30 | sudo pip install flask_bcrypt 31 | sudo pip install flask_cache 32 | sudo pip install flask_debugtoolbar 33 | 34 | ``` 35 | 36 | 安装并克隆`cookieclutter` 37 | 38 | ```py 39 | sudo pip install cookiecutter 40 | sudo pip install mock==1.0.1 41 | cookiecutter https://github.com/sloria/cookiecutter-flask.git 42 | 43 | ``` 44 | 45 | 系统将询问您有关项目的一些信息,并根据需要输入: 46 | 47 | ```py 48 | remote: Counting objects: 1545, done. 49 | remote: Total 1545 (delta 0), reused 0 (delta 0), pack-reused 1545 50 | Receiving objects: 100% (1545/1545), 1.57 MiB | 720.00 KiB/s, done. 51 | Resolving deltas: 100% (857/857), done. 52 | Checking connectivity... done. 53 | full_name (default is "Steven Loria")? Steven Loria 54 | email (default is "[email protected]")? [email protected] 55 | github_username (default is "sloria")? sloria 56 | project_name (default is "My Flask App")? example 57 | app_name (default is "myflaskapp")? example 58 | project_short_description (default is "A flasky app.")? a flasky app 59 | 60 | ``` 61 | 62 | 然后输入您的项目目录(示例)并启动服务器 63 | 64 | ```py 65 | cd example 66 | python manage.py runserver 67 | 68 | ``` 69 | 70 | 然后,您可以打开 [http://127.0.0.1:5000](http://127.0.0.1:5000) 71 | 72 | ![cookiecutter](img/bbadfcdfb92f4eda0d40720b8d0e771e.jpg) 73 | 74 | `cookiecutter`输出主题 -------------------------------------------------------------------------------- /docs/216.md: -------------------------------------------------------------------------------- 1 | # QT4 消息框 2 | 3 | > 原文: [https://pythonspot.com/qt4-messagebox/](https://pythonspot.com/qt4-messagebox/) 4 | 5 | [PyQT4](https://pythonspot.com/pyqt4/) 使用多种功能提供消息框功能。 [PyQT4](https://pythonspot.com/pyqt4/) 中包含的 消息框是:问题,警告,错误,信息,批评和关于框。 6 | 7 | ## PyQt4 消息框 8 | 9 | 下面的代码将显示一个带有两个按钮的消息框: 10 | 11 | ```py 12 | #! /usr/bin/env python 13 | # -*- coding: utf-8 -*- 14 | # 15 | import sys 16 | from PyQt4.QtGui import * 17 | 18 | # Create an PyQT4 application object. 19 | a = QApplication(sys.argv) 20 | 21 | # The QWidget widget is the base class of all user interface objects in PyQt4. 22 | w = QWidget() 23 | 24 | # Show a message box 25 | result = QMessageBox.question(w, 'Message', "Do you like Python?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) 26 | 27 | if result == QMessageBox.Yes: 28 | print('Yes.') 29 | else: 30 | print('No.') 31 | 32 | # Show window 33 | w.show() 34 | 35 | sys.exit(a.exec_()) 36 | 37 | ``` 38 | 39 | 结果: 40 | 41 | ![qtMessagebox question](img/42005bdb1e24d6b5c1b14e5895521e3a.jpg) 42 | 43 | QT 问题消息框 44 | 45 | [PyQT4](https://pythonspot.com/pyqt4/) 提供了不同类型的消息框。 46 | 47 | ## PyQT4 警告框 48 | 49 | 您可以使用以下代码行显示警告框: 50 | 51 | ```py 52 | QMessageBox.warning(w, "Message", "Are you sure you want to continue?") 53 | 54 | ``` 55 | 56 | ## PyQT4 信息框 57 | 58 | 我们可以使用`QMessageBox.information()`显示一个信息框 59 | 60 | ```py 61 | QMessageBox.information(w, "Message", "An information messagebox @ pythonspot.com ") 62 | 63 | ``` 64 | 65 | 结果: 66 | 67 | ![QMessageBox Info](img/6efbaae64acdb4e69214c7589963b5bd.jpg) 68 | 69 | `QMessageBox`信息 70 | 71 | ## PyQT4 错误框 72 | 73 | 如果您的应用程序出现问题,则可能需要显示一条错误消息。 74 | 75 | ```py 76 | QMessageBox.critical(w, "Message", "No disk space left on device.") 77 | 78 | ``` 79 | 80 | 结果: 81 | 82 | ![QMessagebox ](img/af9cd039b8bc48207cfd140b3bd3dd1c.jpg) 83 | 84 | `QMessagebox` 85 | 86 | ## PyQT4 关于框 87 | 88 | 我们已经在上面显示了问题框。 89 | 90 | ```py 91 | QMessageBox.about(w, "About", "An example messagebox @ pythonspot.com ") 92 | 93 | ``` 94 | 95 | 结果 96 | 97 | ![qt Messagebox](img/843b3c0a68065ac101f04944c2bac053.jpg) 98 | 99 | QT 消息框 100 | 101 | [下载 PyQT 代码(批量收集)](https://pythonspot.com/python-qt-examples/) -------------------------------------------------------------------------------- /docs/68.md: -------------------------------------------------------------------------------- 1 | # PyQT5 2 | 3 | > 原文: [https://pythonspot.com/pyqt5/](https://pythonspot.com/pyqt5/) 4 | 5 | [PyQt5](https://pypi.python.org/pypi/PyQt5/5.6) 是可用于创建图形用户界面(GUI)的模块。 PyQt5 与 [PyQt4](https://pythonspot.com/pyqt4/) 向后不兼容。 您将需要 Python 2.6 或更高版本。 要测试您的 Python 版本,请尝试以下命令之一: 6 | 7 | ```py 8 | python3 --version python --version 9 | 10 | ``` 11 | 12 | ## PyQt5 课程 13 | 14 | 喜欢课程还是想要获得认证? 15 | 16 | * [使用 PyQt5 创建 GUI 应用](https://gum.co/pysqtsamples) 17 | 18 | ![PyQt5 example (appearance depends on operating system](img/4c1c799e1aa4d7f3a9c4b9104ff0efe2.jpg) 19 | 20 | ## 文章 21 | 22 | 以下 PyQT5 文章的集合。 23 | 24 | * [PyQt5 窗口](https://pythonspot.com/pyqt5-window/) 25 | * [PyQt5 状态栏](https://pythonspot.com/pyqt5-statusbar/) 26 | * [PyQt5 按钮](https://pythonspot.com/pyqt5-buttons/) 27 | * [PyQt5 信号和插槽](https://pythonspot.com/pyqt5-signals-and-slots/) 28 | * [PyQt5 消息框](https://pythonspot.com/pyqt5-messagebox/) 29 | * [PyQt5 文本框](https://pythonspot.com/pyqt5-textbox-example/) 30 | * [PyQt5 定位](https://pythonspot.com/pyqt5-absolute-position/) 31 | * [PyQt5 菜单](https://pythonspot.com/pyqt5-menu/) 32 | * [PyQt5 表](https://pythonspot.com/pyqt5-table/) 33 | * [PyQt5 标签](https://pythonspot.com/pyqt5-tabs/) 34 | * [PyQt5 水平布局](https://pythonspot.com/pyqt5-horizontal-layout/) 35 | * [PyQt5 网格布局](https://pythonspot.com/pyqt5-grid-layout/) 36 | * [PyQt5 输入对话框](https://pythonspot.com/pyqt5-input-dialog/) 37 | * [PyQt5 文件对话框](https://pythonspot.com/pyqt5-file-dialog/) 38 | * [PyQt5 加载图片](https://pythonspot.com/pyqt5-image/) 39 | * [PyQt5 绘图和像素](https://pythonspot.com/pyqt5-pixels/) 40 | * [PyQt5 颜色对话框](https://pythonspot.com/pyqt5-color-dialog/) 41 | * [PyQt5 颜色](https://pythonspot.com/pyqt5-colors/) 42 | * [拖放](https://pythonspot.com/pyqt5-drag-and-drop/) 43 | * [PyQt5 字体对话框](https://pythonspot.com/pyqt5-font-dialog/) 44 | * [PyQt5 matplotlib](https://pythonspot.com/pyqt5-matplotlib/) 45 | * [Webkit 浏览器](https://pythonspot.com/pyqt5-browser/) 46 | * [PyQt5 完整浏览器](https://pythonspot.com/pyqt5-webkit-browser/) 47 | * [PyQt5 树状视图](https://pythonspot.com/pyqt5-treeview/) 48 | * [PyQt5 目录视图](https://pythonspot.com/pyqt5-directory-view/) 49 | * [PyQt5 表单布局](https://pythonspot.com/pyqt5-form-layout/) 50 | * [PyQt5 框布局](https://pythonspot.com/pyqt5-qboxlayout/) -------------------------------------------------------------------------------- /docs/203.md: -------------------------------------------------------------------------------- 1 | # PyQt5 按钮 2 | 3 | > 原文: [https://pythonspot.com/pyqt5-buttons/](https://pythonspot.com/pyqt5-buttons/) 4 | 5 | PyQt5 支持使用`QPushButton`类的按钮。 此类在`PyQt5.QtWidgets`组中。 可以通过调用构造函数`QPushButton`并将其文本显示为参数来创建按钮。 6 | 7 | ## 简介 8 | 9 | 要将按钮用于 [PyQt5](https://pythonspot.com/pyqt5/) 应用程序,我们需要更新导入行: 10 | 11 | ```py 12 | from PyQt5.QtWidgets import QApplication, QWidget, QPushButton 13 | from PyQt5.QtCore import pyqtSlot 14 | 15 | ``` 16 | 17 | 在`initUI()`方法中,添加以下代码行: 18 | 19 | ```py 20 | button = QPushButton('PyQt5 button', self) 21 | button.setToolTip('This is an example button') 22 | button.move(100,70) 23 | 24 | ``` 25 | 26 | `QPushButton`创建小部件,第一个参数是按钮上的文本。 当用户将鼠标指向按钮时,`setToolTip`方法显示消息。 最后,将按钮移动到坐标`x = 100`,`y = 70`。 我们需要为按钮单击创建一种方法: 27 | 28 | ```py 29 | @pyqtSlot() 30 | def on_click(self): 31 | print('PyQt5 button click') 32 | 33 | ``` 34 | 35 | 使用以下命令将连接方法添加到单击: 36 | 37 | ```py 38 | button.clicked.connect(self.on_click) 39 | 40 | ``` 41 | 42 | 最终 [PyQt5](https://pythonspot.com/pyqt5/) 按钮代码: 43 | 44 | ```py 45 | import sys 46 | from PyQt5.QtWidgets import QApplication, QWidget, QPushButton 47 | from PyQt5.QtGui import QIcon 48 | from PyQt5.QtCore import pyqtSlot 49 | 50 | class App(QWidget): 51 | 52 | def __init__(self): 53 | super().__init__() 54 | self.title = 'PyQt5 button - pythonspot.com' 55 | self.left = 10 56 | self.top = 10 57 | self.width = 320 58 | self.height = 200 59 | self.initUI() 60 | 61 | def initUI(self): 62 | self.setWindowTitle(self.title) 63 | self.setGeometry(self.left, self.top, self.width, self.height) 64 | 65 | button = QPushButton('PyQt5 button', self) 66 | button.setToolTip('This is an example button') 67 | button.move(100,70) 68 | button.clicked.connect(self.on_click) 69 | 70 | self.show() 71 | 72 | @pyqtSlot() 73 | def on_click(self): 74 | print('PyQt5 button click') 75 | 76 | if __name__ == '__main__': 77 | app = QApplication(sys.argv) 78 | ex = App() 79 | sys.exit(app.exec_()) 80 | 81 | ``` 82 | 83 | ![pyqt5-button](img/21216682f087b65cf13cc14fe0839117.jpg) 84 | 85 | 上面的 [PyQt5](https://pythonspot.com/pyqt5/) 按钮示例的屏幕截图。 86 | 87 | [下载 PyQT5 示例](https://pythonspot.com/download-pyqt5-examples/) -------------------------------------------------------------------------------- /asset/style.css: -------------------------------------------------------------------------------- 1 | /*隐藏头部的目录*/ 2 | #main>ul:nth-child(1) { 3 | display: none; 4 | } 5 | 6 | #main>ul:nth-child(2) { 7 | display: none; 8 | } 9 | 10 | .markdown-section h1 { 11 | margin: 3rem 0 2rem 0; 12 | } 13 | 14 | .markdown-section h2 { 15 | margin: 2rem 0 1rem; 16 | } 17 | 18 | img, 19 | pre { 20 | border-radius: 8px; 21 | } 22 | 23 | .content, 24 | .sidebar, 25 | .markdown-section, 26 | body, 27 | .search input { 28 | background-color: rgba(243, 242, 238, 1) !important; 29 | } 30 | 31 | @media (min-width:600px) { 32 | .sidebar-toggle { 33 | background-color: #f3f2ee; 34 | } 35 | } 36 | 37 | .docsify-copy-code-button { 38 | background: #f8f8f8 !important; 39 | color: #7a7a7a !important; 40 | } 41 | 42 | body { 43 | /*font-family: Microsoft YaHei, Source Sans Pro, Helvetica Neue, Arial, sans-serif !important;*/ 44 | } 45 | 46 | .markdown-section>p { 47 | font-size: 16px !important; 48 | } 49 | 50 | .markdown-section pre>code { 51 | font-family: Consolas, Roboto Mono, Monaco, courier, monospace !important; 52 | font-size: .9rem !important; 53 | 54 | } 55 | 56 | /*.anchor span { 57 | color: rgb(66, 185, 131); 58 | }*/ 59 | 60 | section.cover h1 { 61 | margin: 0; 62 | } 63 | 64 | body>section>div.cover-main>ul>li>a { 65 | color: #42b983; 66 | } 67 | 68 | .markdown-section img { 69 | box-shadow: 7px 9px 10px #aaa !important; 70 | } 71 | 72 | 73 | pre { 74 | background-color: #f3f2ee !important; 75 | } 76 | 77 | @media (min-width:600px) { 78 | pre code { 79 | /*box-shadow: 2px 1px 20px 2px #aaa;*/ 80 | /*border-radius: 10px !important;*/ 81 | padding-left: 20px !important; 82 | } 83 | } 84 | 85 | @media (max-width:600px) { 86 | pre { 87 | padding-left: 0px !important; 88 | padding-right: 0px !important; 89 | } 90 | } 91 | 92 | .markdown-section pre { 93 | padding-left: 0 !important; 94 | padding-right: 0px !important; 95 | box-shadow: 2px 1px 20px 2px #aaa; 96 | } -------------------------------------------------------------------------------- /docs/34.md: -------------------------------------------------------------------------------- 1 | # Python 集合 2 | 3 | > 原文: [https://pythonspot.com/python-set/](https://pythonspot.com/python-set/) 4 | 5 | ## Python 集合 6 | 7 | Python 中的集合是对象的集合。 集合在 Python 2.4 和更高版本中可用。 它们与列表或元组的不同之处在于它们是根据数学集合建模的。 8 | 9 | ## 集合示例 10 | 11 | 要创建一个集合,我们使用`set()`函数。 12 | 13 | ```py 14 | #!/usr/bin/env python 15 | 16 | x = set(["Postcard", "Radio", "Telegram"]) 17 | print(x) 18 | 19 | ``` 20 | 21 | 如果我们多次添加相同的`item`元素,则会将其删除。 一个集合不能多次包含相同的元素。 22 | 23 | ```py 24 | #!/usr/bin/env python 25 | 26 | x = set(["Postcard", "Radio", "Telegram", "Postcard"]) 27 | print(x) 28 | 29 | ``` 30 | 31 | ## 简单记法 32 | 33 | 如果您使用 Python 2.6 版或更高版本,则可以使用简化的符号: 34 | 35 | ```py 36 | #!/usr/bin/env python 37 | 38 | x = set(["Postcard", "Radio", "Telegram"]) 39 | print(x) 40 | 41 | y = {"Postcard","Radio","Telegram"} 42 | print(y) 43 | 44 | ``` 45 | 46 | ## 集合方法 47 | 48 | ## 从集合清除元素 49 | 50 | 要从集合中删除所有元素: 51 | 52 | ```py 53 | #!/usr/bin/env python 54 | 55 | x = set(["Postcard", "Radio", "Telegram"]) 56 | x.clear() 57 | print(x) 58 | 59 | ``` 60 | 61 | ## 将元素添加到集合中 62 | 63 | 要将元素添加到集合中: 64 | 65 | ```py 66 | #!/usr/bin/env python 67 | 68 | x = set(["Postcard", "Radio", "Telegram"]) 69 | x.add("Telephone") 70 | print(x) 71 | 72 | ``` 73 | 74 | ## 将元素从集合中删除 75 | 76 | 要将元素从集合中删除: 77 | 78 | ```py 79 | !/usr/bin/env python 80 | 81 | x = set(["Postcard", "Radio", "Telegram"]) 82 | x.remove("Radio") 83 | print(x) 84 | 85 | ``` 86 | 87 | ## 两个集合之间的差异 88 | 89 | 要查找两个集合之间的差异,请使用: 90 | 91 | ```py 92 | #!/usr/bin/env python 93 | x = set(["Postcard", "Radio", "Telegram"]) 94 | y = set(["Radio","Television"]) 95 | print( x.difference(y) ) 96 | print( y.difference(x) ) 97 | 98 | ``` 99 | 100 | 请注意,x.difference(y)与 y.difference(x)不同。 101 | 102 | ## 子集 103 | 104 | 要测试集合是否为子集,请使用: 105 | 106 | ```py 107 | #!/usr/bin/env python 108 | 109 | x = set(["a","b","c","d"]) 110 | y = set(["c","d"]) 111 | print( x.issubset(y) ) 112 | 113 | ``` 114 | 115 | ## 超集 116 | 117 | 要测试集合是否是超集,请执行以下操作: 118 | 119 | ```py 120 | #!/usr/bin/env python 121 | 122 | x = set(["a","b","c","d"]) 123 | y = set(["c","d"]) 124 | print( x.issuperset(y) ) 125 | 126 | ``` 127 | 128 | ## 交集 129 | 130 | 要测试交集,请使用: 131 | 132 | ```py 133 | #!/usr/bin/env python 134 | 135 | x = set(["a","b","c","d"]) 136 | y = set(["c","d"]) 137 | print( x.intersection(y) ) 138 | 139 | ``` -------------------------------------------------------------------------------- /docs/102.md: -------------------------------------------------------------------------------- 1 | # Google Hangouts 视频中的人脸检测 2 | 3 | > 原文: [https://pythonspot.com/face-detection-in-video/](https://pythonspot.com/face-detection-in-video/) 4 | 5 | 在本教程中,您将学习如何在 Python 中应用人脸检测。 作为输入视频,我们将使用 Google Hangouts 视频。 网路上有大量的 Google Hangouts 视讯,在这些视讯中,人脸通常大到足以让软体侦测到人脸。 6 | 7 | 使用 OpenCV(Open Computer Vision)库实现面部检测。 最常见的面部检测方法是[ haar 级联](https://docs.opencv.org/modules/objdetect/doc/cascade_classification.html#haar-feature-based-cascade-classifier-for-object-detection)。已知该技术可以很好地与人脸检测配合使用。 您需要将级联文件(包含在 OpenCV 中)放在程序所在的目录中。 8 | 9 | ## Python OpenCV 和视频 10 | 11 | 为了分析输入视频,我们提取每个帧。 每个帧显示的时间很短。 从这个基本程序开始: 12 | 13 | ```py 14 | #! /usr/bin/python 15 | 16 | import cv2 17 | 18 | vc = cv2.VideoCapture('video.mp4') 19 | c=1 20 | fps = 24 21 | 22 | if vc.isOpened(): 23 | rval , frame = vc.read() 24 | else: 25 | rval = False 26 | 27 | while rval: 28 | rval, frame = vc.read() 29 | cv2.imshow("Result",frame) 30 | cv2.waitKey(1000 / fps); 31 | vc.release() 32 | 33 | ``` 34 | 35 | 执行后,您将看到没有声音播放的视频。(OpenCV 不支持声音)。在 while 循环内,我们将每个视频帧包含在可变帧内。 36 | 37 | ## 使用 OpenCV 进行人脸检测 38 | 39 | 我们将在脸部上方显示一个矩形。 为了避免矩形的闪烁,如果未检测到面部,我们将在最新的已知位置显示该矩形。 40 | 41 | ```py 42 | #! /usr/bin/python 43 | 44 | import cv2 45 | 46 | face_cascade = cv2.CascadeClassifier('lbpcascade_frontalface.xml') 47 | vc = cv2.VideoCapture('video.mp4') 48 | 49 | if vc.isOpened(): 50 | rval , frame = vc.read() 51 | else: 52 | rval = False 53 | 54 | roi = [0,0,0,0] 55 | 56 | while rval: 57 | rval, frame = vc.read() 58 | 59 | # resize frame for speed. 60 | frame = cv2.resize(frame, (300,200)) 61 | 62 | # face detection. 63 | faces = face_cascade.detectMultiScale(frame, 1.8, 2) 64 | nfaces = 0 65 | for (x,y,w,h) in faces: 66 | cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2) 67 | nfaces = nfaces + 1 68 | roi = [x,y,w,h] 69 | 70 | # undetected face, show old on position. 71 | if nfaces == 0: 72 | cv2.rectangle(frame,(roi[0],roi[1]),(roi[0]+roi[2],roi[1]+roi[3]),(0,0,255),2) 73 | 74 | # show result 75 | cv2.imshow("Result",frame) 76 | cv2.waitKey(1); 77 | vc.release() 78 | 79 | ``` 80 | 81 | 在此程序中,我们仅假设视频屏幕中只有一张脸。 我们减小了屏幕尺寸,以加快处理时间。 在大多数情况下,这很好,因为检测将在较低的分辨率下正常工作。 如果要“实时”执行人脸检测,则必须缩短计算周期。 此实现的替代方法是先处理,然后再显示。 82 | 83 | 该技术的局限性在于它不能始终检测到面部,并且可能无法检测到很小或被遮挡的面部。 它可能显示出误报,例如被检测为人脸的袋子。 这种技术在某些类型的输入视频上效果很好。 84 | 85 | [下载计算机视觉示例和课程](https://pythonspot.com/download-vision-examples/) -------------------------------------------------------------------------------- /docs/113.md: -------------------------------------------------------------------------------- 1 | # 使用 Google Speech API 进行语音识别 2 | 3 | > 原文: [https://pythonspot.com/speech-recognition-using-google-speech-api/](https://pythonspot.com/speech-recognition-using-google-speech-api/) 4 | 5 | Google 具有出色的语音识别 API。 该 API 将语音文本(麦克风)转换为书面文本(Python 字符串),即语音到文本。 您只需在麦克风中讲话即可,Google API 会将其翻译成书面文字。 该 API 对于英语具有出色的效果。 6 | 7 | Google 还创建了 JavaScript Web Speech API,因此您可以根据需要在 JavaScript 中识别语音,以下是此链接:[https://www.google.com/intl/zh-CN/chrome/demos/speech.html](https://www.google.com/intl/en/chrome/demos/speech.html)。 要在网络上使用它,您将需要 Google Chrome 25 版或更高版本。 8 | 9 | ## 安装 10 | 11 | Google Speech API v2 每天最多只能查询 50 个查询。确保您的麦克风良好。 12 | 13 | 您是否正在寻找[文字转语音](https://pythonspot.com/speech-engines-with-python-tutorial/)? 14 | 15 | 这是 Ubuntu Linux 的安装指南。 但这可能在其他平台上也很好。 您将需要安装一些软件包:PyAudio,PortAudio 和 SpeechRecognition。 PyAudio 0.2.9 是必需的,您可能需要手动进行编译。 16 | 17 | ```py 18 | git clone http://people.csail.mit.edu/hubert/git/pyaudio.git 19 | cd pyaudio 20 | sudo python setup.py install 21 | sudo apt-get installl libportaudio-dev 22 | sudo apt-get install python-dev 23 | sudo apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev 24 | sudo pip3 install SpeechRecognition 25 | 26 | ``` 27 | 28 | ## 程序 29 | 30 | 该程序将记录来自麦克风的音频,将其发送到语音 API 并返回 Python 字符串。 31 | 32 | 使用语音识别模块记录音频,该模块将包括在程序顶部。 其次,我们将录制的语音发送到 Google 语音识别 API,然后该 API 返回输出。 33 | 34 | `r.recognize_google(audio)`返回一个字符串。 35 | 36 | ```py 37 | 38 | #!/usr/bin/env python3 39 | # Requires PyAudio and PySpeech. 40 | 41 | import speech_recognition as sr 42 | 43 | # Record Audio 44 | r = sr.Recognizer() 45 | with sr.Microphone() as source: 46 | print("Say something!") 47 | audio = r.listen(source) 48 | 49 | # Speech recognition using Google Speech Recognition 50 | try: 51 | # for testing purposes, we're just using the default API key 52 | # to use another API key, use `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")` 53 | # instead of `r.recognize_google(audio)` 54 | print("You said: " + r.recognize_google(audio)) 55 | except sr.UnknownValueError: 56 | print("Google Speech Recognition could not understand audio") 57 | except sr.RequestError as e: 58 | print("Could not request results from Google Speech Recognition service; {0}".format(e)) 59 | 60 | ``` 61 | 62 | 您可能会喜欢:[个人助理 Jarvis(语音识别和文本到语音)](https://pythonspot.com/personal-assistant-jarvis-in-python/)或[语音引擎](https://pythonspot.com/speech-engines-with-python-tutorial/) --------------------------------------------------------------------------------