{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/desktop-app-tech-stack-selection/",
  "atlas": "https://www.pystone.net/?node=desktop-app-tech-stack-selection#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/desktop-app-tech-stack-selection.md",
  "context": "https://www.pystone.net/notes/desktop-app-tech-stack-selection.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:desktop-app-tech-stack-selection",
  "slug": "desktop-app-tech-stack-selection",
  "title": "技术方案选型",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "技术方案选型 功能是否强大（所封装的可实现的效果足够，并且简单） 并不仅仅是要实现的可能性多，也不仅仅是要接口简单。有些工具，确实可以实现复杂的效果，但是需要的工作量大；有些工具，虽然接口足够简单，但是可实现的效果也比较有限。所以，需要工具本身为丰富的功能提供充分的支持。",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "925989c4553e21cd9a28a7b643d7aad264120e0415e4809b2c58557f7f90d707",
  "assets": [
    {
      "reference": "assets/image-20231109130714583.png",
      "url": "/media/fb79d751100d6fb5f176.png",
      "mediaType": "image/png",
      "contentHash": "fb79d751100d6fb5f17697df8ec4935b8af2d52d609c7fc5095b9e1556d02d92",
      "byteLength": 23993,
      "width": 907,
      "height": 153
    },
    {
      "reference": "assets/image-20231109130627764.png",
      "url": "/media/df7d718f7185684c7877.png",
      "mediaType": "image/png",
      "contentHash": "df7d718f7185684c7877c7d20a64b7d7eac54aa01e1e63905142f90e72d45681",
      "byteLength": 190337,
      "width": 947,
      "height": 676
    },
    {
      "reference": "assets/image-20231109130232573.png",
      "url": "/media/ebd984c7958faa44cad1.png",
      "mediaType": "image/png",
      "contentHash": "ebd984c7958faa44cad14efd7ad5aa4aa376928fd52736e40ccbd70c0acefe17",
      "byteLength": 90399,
      "width": 763,
      "height": 478
    }
  ],
  "headings": [
    {
      "depth": 1,
      "text": "技术方案选型",
      "anchor": "技术方案选型",
      "citation": "https://www.pystone.net/notes/desktop-app-tech-stack-selection/#%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88%E9%80%89%E5%9E%8B"
    },
    {
      "depth": 2,
      "text": "可选方案",
      "anchor": "可选方案",
      "citation": "https://www.pystone.net/notes/desktop-app-tech-stack-selection/#%E5%8F%AF%E9%80%89%E6%96%B9%E6%A1%88"
    },
    {
      "depth": 3,
      "text": "Python GUI框架选择（Tkinter，PyQt，WxPython）",
      "anchor": "python-gui框架选择tkinterpyqtwxpython",
      "citation": "https://www.pystone.net/notes/desktop-app-tech-stack-selection/#python-gui%E6%A1%86%E6%9E%B6%E9%80%89%E6%8B%A9tkinterpyqtwxpython"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:application-and-cloud-engineering",
      "title": "应用开发与云端工程",
      "url": "https://www.pystone.net/notes/application-and-cloud-engineering/",
      "atlas": "https://www.pystone.net/?node=application-and-cloud-engineering#knowledge-atlas",
      "label": "应用开发与云端工程",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "桌面应用开发中的“技术方案选型”导航项",
      "citation": "https://www.pystone.net/notes/application-and-cloud-engineering/#%E6%A1%8C%E9%9D%A2%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91"
    }
  ],
  "contentMarkdown": "# 技术方案选型\n* 功能是否强大（所封装的可实现的效果足够，并且简单）\n并不仅仅是要实现的可能性多，也不仅仅是要接口简单。有些工具，确实可以实现复杂的效果，但是需要的工作量大；有些工具，虽然接口足够简单，但是可实现的效果也比较有限。所以，需要工具本身为丰富的功能提供充分的支持。\n\n* 使用许可证：对于闭源/商用软件，能否使用。\n\n## 可选方案\nMFC：Microsoft提供的用于创建Windows桌面应用程序的.NET框架，最古老的开发桌面GUI程序的框架，- 基于C#或VB.NET等语言,封装了大量的底层Windows API，可以快速开发桌面程序。\nQt：C++，免费、开源、跨平台（Windows、macOS、Linux、Android和iOS），自带有Qt Designer这个设计工具，控件众多，只需拖拽、编辑属性，便可快速创建一个界面美观的GUI桌面应用程序。\nJava - Swing：Java自带的GUI包，既可以纯代码写GUI界面，也可以安装WindowBuilder这些插件。\nJava - JavaFX，集成在Java SE中，可以跨平台运行。支持丰富的图形和多媒体功能。\nPython - tkinter：最基本的一个Python GUI库，小巧灵活、跨平台，开发小型应用可以考虑\nPython - PyQt：Qt提供给Python的一个接口，\nGTK：最初是为Linux桌面应用设计的，但现在也可在其他平台上使用。支持多种编程语言，如C、C++、Python等。\n\n\n可能的选择：\nGTK - C#\nIMGUI - C++\nPyQT - Python\n\n桌面软件开发框架大赏   https://blog.csdn.net/weixin_51627076/article/details/132818008\n7款桌面应用程序开发框架 https://blog.csdn.net/weixin_51627076/article/details/132818008\n\n\n![](assets/image-20231109130714583.png)\n\n\n![](assets/image-20231109130627764.png)\n\n\n### Python GUI框架选择（Tkinter，PyQt，WxPython）\n\n\nWxPython：相比于 PyQt 模块，WxPython 模块的文档较少，功能相对较弱。免费的，源代码是开放的，允许其应用在商业产品上。\nPySide 2：PySide是官方推出的，可以闭源商用的。与PyQt接口一致，可以互相参考。\nPyQt：\n1. 文档丰富；\n2. 学习成本低，后期迁移成本低；\n3. 开发效率高，开发人员可以使用 Qt-designer 进行拖拽布局；\n4. 开发经验可以迁移到 pyside 进行商业软件开发；\n\nTkinter过于简单，组件不是很齐全。wxPython组件比较丰富，做一些工具软件或小型软件是完全没问题的。以后做复杂一点的需求，就考虑用PySide6以及后续版本。毕竟它跟wxPython一样也是LGPL协议的，而且PySide6是Qt亲生的。PyQt虽然也很优秀，但是它的双重许可总让人觉得有点忐忑。(https://blog.csdn.net/baiydn/article/details/126143513)\n\nPyQT vs PySide:https://www.pythonguis.com/faq/pyqt5-vs-pyside2/\n![](assets/image-20231109130232573.png)\nhttps://www.pythonguis.com/faq/pyqt5-vs-pyside2/\n\n\nRef:\nhttp://www.apppark.cn/t-47562.html\nhttps://blog.csdn.net/pcx171/article/details/129016862\nhttps://blog.csdn.net/baiydn/article/details/126143513\nhttps://zhuanlan.zhihu.com/p/547806659\nhttps://blog.csdn.net/weixin_51627076/article/details/132818008\n"
}
