基于Python开发的图形界面设计工具

 更新时间:2026年06月17日 08:19:19   作者:天天进步2015  
在桌面软件开发中,很多 Python 初学者会选择 Tkinter、PyQt 或 CustomTkinter 构建图形界面,但如果每个按钮、输入框、标签都手写坐标和尺寸,开发效率会比较低,本项目实现一个 Python 图形界面设计工具,需要的朋友可以参考下

一、项目简介

在桌面软件开发中,很多 Python 初学者会选择 Tkinter、PyQt 或 CustomTkinter 构建图形界面。但如果每个按钮、输入框、标签都手写坐标和尺寸,开发效率会比较低。本项目实现一个 Python 图形界面设计工具:用户可以在浏览器中注册登录、创建 GUI 设计项目、维护控件清单、在画布上预览控件位置,并一键导出 Tkinter 原型代码。

它不是单纯的算法演示,而是一个完整的全栈项目:后端负责认证鉴权、SQLite 持久化、项目 CRUD 和代码生成;前端使用 Vue 3 + Vite 构建交互式设计器;最终形成一个可运行、可扩展的 GUI 低代码设计平台雏形。

二、技术栈

层次技术
后端Python 3、FastAPI、SQLAlchemy、Pydantic
数据库SQLite
认证密码哈希、随机 Token、Bearer 鉴权
前端Vue 3、Vite、Composition API、CSS Grid/Flex
业务主题图形界面设计、控件属性管理、Tkinter 代码生成
部署运行Uvicorn + Vite Dev Server

前端主技术栈为 Vue 3 + Vite,后端主技术栈为 FastAPI + SQLite

三、系统架构

浏览器 Vue 3 前端
   │  登录/注册/项目管理/代码导出
   ▼
FastAPI REST API
   │  用户认证、鉴权、业务校验
   ▼
SQLite 数据库
   │  users / auth_tokens / design_projects / ui_components
   ▼
代码生成模块
      根据控件类型、坐标、尺寸生成 Tkinter Python 文件内容

系统采用前后端分离架构。Vue 负责页面状态、画布预览和表单输入;FastAPI 统一提供 /api 接口;SQLite 适合教学、课程设计和小型工具原型;代码生成逻辑独立放在 crud.py,便于后续扩展到 PyQt、CustomTkinter 或 Web UI 代码生成。

四、功能模块

用户模块

  • 用户注册
  • 用户登录
  • Token 认证
  • 退出登录
  • 当前用户信息查询

GUI 设计项目模块

  • 创建图形界面设计项目
  • 查看项目列表
  • 编辑项目名称、说明、画布尺寸、目标平台
  • 删除项目

控件设计模块

  • 添加 Button、Label、Entry、Text、Combobox 控件
  • 设置控件文本
  • 设置控件 x/y 坐标
  • 设置控件宽高
  • 在浏览器画布中实时预览布局

代码导出模块

  • 根据数据库中的项目和控件生成 Tkinter 代码
  • 前端弹窗预览导出结果
  • 用户可复制保存为 .py 文件运行

五、数据库/数据模型设计

项目包含四张核心表。

1. users 用户表

字段说明
id用户 ID
username用户名,唯一
email邮箱,唯一
password_hash哈希后的密码
created_at创建时间

2. auth_tokens 登录令牌表

字段说明
idToken ID
token随机访问令牌
user_id所属用户
created_at创建时间

3. design_projects 设计项目表

字段说明
id项目 ID
name项目名称
description项目说明
canvas_width/canvas_height画布宽高
platform目标平台,如 Tkinter
owner_id所属用户

4. ui_components 控件表

字段说明
id控件 ID
project_id所属项目
type控件类型
text控件文本
x/y坐标
width/height尺寸
props扩展属性 JSON 字符串

对应的 SQLAlchemy 模型位于 backend/app/models.py,通过 relationship 建立用户、项目和控件之间的一对多关系。

六、后端接口设计

方法接口功能是否鉴权
GET/api/health健康检查
POST/api/auth/register用户注册
POST/api/auth/login用户登录
POST/api/auth/logout退出登录
GET/api/me当前用户
GET/api/projects查询项目列表
POST/api/projects创建项目
GET/api/projects/{project_id}项目详情
PUT/api/projects/{project_id}更新项目
DELETE/api/projects/{project_id}删除项目
GET/api/projects/{project_id}/export导出 Tkinter 代码

后端通过 Authorization 请求头中的 Bearer Token 识别用户身份,项目相关接口都只能访问当前登录用户自己的数据。

七、前端页面设计

前端使用 Vue 3 单文件组件实现,核心页面包括:

  1. 登录/注册卡片:用户输入用户名、邮箱和密码,认证成功后保存 token。
  2. 项目侧边栏:展示当前用户的 GUI 设计项目列表,并支持新建设计。
  3. 设计器工具栏:编辑项目名称、目标平台、保存项目、导出代码、删除项目。
  4. 控件工具箱:提供 Button、Label、Entry、Text、Combobox 快速添加按钮。
  5. 画布区域:使用绝对定位展示控件,模拟 GUI 设计器的视觉布局。
  6. 属性面板:选中控件后编辑文本、坐标、宽度和高度。
  7. 代码预览层:调用后端导出接口后展示 Tkinter 代码。

八、核心代码讲解

1. 数据库连接

backend/app/database.py 创建 SQLite 引擎和 SQLAlchemy Session:

SQLALCHEMY_DATABASE_URL = "sqlite:///./gui_designer.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

get_db() 使用生成器模式向 FastAPI 依赖注入数据库连接,请求结束后自动关闭。

2. 密码哈希与 Token

backend/app/crud.py 使用 passlib 对密码进行哈希,避免明文保存密码:

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def hash_password(password: str) -> str:
    return pwd_context.hash(password)

def verify_password(password: str, password_hash: str) -> bool:
    return pwd_context.verify(password, password_hash)

登录成功后通过 secrets.token_urlsafe(32) 生成随机 token,并保存到数据库。退出登录时删除 token。

3. FastAPI 鉴权依赖

main.py 中的 get_current_user() 会校验请求头:

def get_current_user(authorization: str = Header(default=""), db: Session = Depends(get_db)):
    if not authorization.startswith("Bearer "):
        raise HTTPException(status_code=401, detail="未登录或 token 格式错误")
    token = authorization.replace("Bearer ", "", 1).strip()
    user = crud.get_user_by_token(db, token)
    if not user:
        raise HTTPException(status_code=401, detail="登录已过期")
    return user

项目管理和代码导出接口都依赖该函数,因此可以保护核心业务数据。

4. Tkinter 代码生成

系统根据控件类型映射到 Tkinter 组件,并生成 place() 布局代码:

widget_map = {
    "Button": "tk.Button(root, text={text!r})",
    "Label": "tk.Label(root, text={text!r})",
    "Entry": "tk.Entry(root)",
    "Text": "tk.Text(root)",
    "Combobox": "ttk.Combobox(root, values=['选项A', '选项B'])",
}

每个控件会转换为类似代码:

widget_1 = tk.Button(root, text='登录')
widget_1.place(x=220, y=160, width=120, height=36)

5. Vue 鉴权请求封装

frontend/src/api.js 统一读取本地 token 并追加到请求头:

const token = getToken()
if (token) headers.Authorization = `Bearer ${token}`

这样 App.vue 中的业务代码只需要调用 api.listProjects()api.createProject() 等方法,不必重复编写 fetch 细节。

九、部署与运行步骤

项目源码已放在 project/ 目录中。

1. 启动后端

cd project/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

后端默认地址:http://127.0.0.1:8000

2. 启动前端

cd project/frontend
npm install
npm run dev

前端默认访问地址通常是:http://127.0.0.1:5173

3. 初始化与使用

  1. 打开前端页面。
  2. 注册用户,例如 demo / demo@example.com / 123456
  3. 登录系统。
  4. 点击“新建设计”。
  5. 添加和编辑控件。
  6. 点击“保存”。
  7. 点击“导出代码”,复制生成的 Tkinter 代码运行。

十、项目扩展方向

  • 支持拖拽移动控件,而不仅仅通过属性面板输入坐标。
  • 增加控件树、图层、对齐线和网格吸附。
  • 导出 PyQt、CustomTkinter、Kivy 等多种 GUI 框架代码。
  • 支持项目版本管理和模板市场。
  • 支持多人协作设计和实时预览。

十一、项目总结

本文完成了一个围绕“Python 图形界面设计工具开发”的全栈项目。项目使用 FastAPI 提供 REST API,SQLite 保存用户与设计数据,Vue 3 + Vite 构建交互式设计器,并实现了完整的注册、登录、Token 鉴权、项目 CRUD、控件编辑和 Tkinter 代码导出功能。

通过该项目可以学习到:如何设计一个前后端分离的 Python 全栈应用,如何保护核心接口,如何将业务数据转化为可运行代码,以及如何用 Vue 3 快速搭建具有真实业务交互的工具型产品。

以上就是基于Python开发的图形界面设计工具的详细内容,更多关于Python图形界面设计工具的资料请关注脚本之家其它相关文章!

相关文章

  • Win10下用Anaconda安装TensorFlow(图文教程)

    Win10下用Anaconda安装TensorFlow(图文教程)

    这篇文章主要介绍了Win10下用Anaconda安装TensorFlow(图文教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • python画折线图的程序

    python画折线图的程序

    这篇文章主要为大家详细介绍了python画折线图的方法,一个画折线图的程序具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Tornado源码分析之HTTP服务请求解析

    Tornado源码分析之HTTP服务请求解析

    这篇文章主要为大家介绍了Tornado源码分析之HTTP服务请求解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • mac安装pytorch及系统的numpy更新方法

    mac安装pytorch及系统的numpy更新方法

    今天小编就为大家分享一篇mac安装pytorch及系统的numpy更新方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 详解Python nose单元测试框架的安装与使用

    详解Python nose单元测试框架的安装与使用

    本篇文章主要介绍了详解Python nose单元测试框架的安装与使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Python数据分析之绘制ppi-cpi剪刀差图形

    Python数据分析之绘制ppi-cpi剪刀差图形

    这篇文章主要介绍了Python数据分析之绘制ppi-cpi剪刀差图形,ppi-cp剪刀差是通过这个指标可以了解当前的经济运行状况,下文更多详细内容介绍需要的小伙伴可以参考一下
    2022-05-05
  • Python中match...case模式匹配结构实现

    Python中match...case模式匹配结构实现

    match...case是 Python 中一个非常强大的新特性,它为开发者提供了一种更优雅、更高效的方式来进行模式匹配,下面就来介绍一下Python中match...case模式匹配,感兴趣的可以了解一下
    2025-04-04
  • Python实现代码统计工具(终极篇)

    Python实现代码统计工具(终极篇)

    这篇文章主要介绍了Python实现代码统计工具的相关资料,供大家参考,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • python dict 相同key 合并value的实例

    python dict 相同key 合并value的实例

    今天小编就为大家分享一篇python dict 相同key 合并value的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 详解python的ORM中Pony用法

    详解python的ORM中Pony用法

    本篇文章给大家详细介绍了python的ORM中Pony用法以及详细代码分享,对此有需要的朋友测试参考下。
    2018-02-02

最新评论