---
title: "技术方案选型"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/desktop-app-tech-stack-selection/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/04-应用开发与云端工程/桌面应用开发/技术方案选型.md"
content_hash: 925989c4553e21cd9a28a7b643d7aad264120e0415e4809b2c58557f7f90d707
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 技术方案选型
* 功能是否强大（所封装的可实现的效果足够，并且简单）
并不仅仅是要实现的可能性多，也不仅仅是要接口简单。有些工具，确实可以实现复杂的效果，但是需要的工作量大；有些工具，虽然接口足够简单，但是可实现的效果也比较有限。所以，需要工具本身为丰富的功能提供充分的支持。

* 使用许可证：对于闭源/商用软件，能否使用。

## 可选方案
MFC：Microsoft提供的用于创建Windows桌面应用程序的.NET框架，最古老的开发桌面GUI程序的框架，- 基于C#或VB.NET等语言,封装了大量的底层Windows API，可以快速开发桌面程序。
Qt：C++，免费、开源、跨平台（Windows、macOS、Linux、Android和iOS），自带有Qt Designer这个设计工具，控件众多，只需拖拽、编辑属性，便可快速创建一个界面美观的GUI桌面应用程序。
Java - Swing：Java自带的GUI包，既可以纯代码写GUI界面，也可以安装WindowBuilder这些插件。
Java - JavaFX，集成在Java SE中，可以跨平台运行。支持丰富的图形和多媒体功能。
Python - tkinter：最基本的一个Python GUI库，小巧灵活、跨平台，开发小型应用可以考虑
Python - PyQt：Qt提供给Python的一个接口，
GTK：最初是为Linux桌面应用设计的，但现在也可在其他平台上使用。支持多种编程语言，如C、C++、Python等。


可能的选择：
GTK - C#
IMGUI - C++
PyQT - Python

桌面软件开发框架大赏   https://blog.csdn.net/weixin_51627076/article/details/132818008
7款桌面应用程序开发框架 https://blog.csdn.net/weixin_51627076/article/details/132818008


![assets/image-20231109130714583.png](/media/fb79d751100d6fb5f176.png)


![assets/image-20231109130627764.png](/media/df7d718f7185684c7877.png)


### Python GUI框架选择（Tkinter，PyQt，WxPython）


WxPython：相比于 PyQt 模块，WxPython 模块的文档较少，功能相对较弱。免费的，源代码是开放的，允许其应用在商业产品上。
PySide 2：PySide是官方推出的，可以闭源商用的。与PyQt接口一致，可以互相参考。
PyQt：
1. 文档丰富；
2. 学习成本低，后期迁移成本低；
3. 开发效率高，开发人员可以使用 Qt-designer 进行拖拽布局；
4. 开发经验可以迁移到 pyside 进行商业软件开发；

Tkinter过于简单，组件不是很齐全。wxPython组件比较丰富，做一些工具软件或小型软件是完全没问题的。以后做复杂一点的需求，就考虑用PySide6以及后续版本。毕竟它跟wxPython一样也是LGPL协议的，而且PySide6是Qt亲生的。PyQt虽然也很优秀，但是它的双重许可总让人觉得有点忐忑。(https://blog.csdn.net/baiydn/article/details/126143513)

PyQT vs PySide:https://www.pythonguis.com/faq/pyqt5-vs-pyside2/
![assets/image-20231109130232573.png](/media/ebd984c7958faa44cad1.png)
https://www.pythonguis.com/faq/pyqt5-vs-pyside2/


Ref:
http://www.apppark.cn/t-47562.html
https://blog.csdn.net/pcx171/article/details/129016862
https://blog.csdn.net/baiydn/article/details/126143513
https://zhuanlan.zhihu.com/p/547806659
https://blog.csdn.net/weixin_51627076/article/details/132818008
