Python窗体编程技术详解

article/2025/6/30 6:45:20

在这里插入图片描述

文章目录

    • 1. Tkinter
      • 简介
      • 示例代码
      • 优势
      • 劣势
    • 2. PyQt/PySide
      • 简介
      • 示例代码(PyQt5)
      • 优势
      • 劣势
    • 3. wxPython
      • 简介
      • 示例代码
      • 优势
      • 劣势
    • 4. Kivy
      • 简介
      • 示例代码
      • 优势
      • 劣势
    • 5. PySimpleGUI
      • 简介
      • 示例代码
      • 优势
      • 劣势
    • 技术对比总结
    • 选择建议

在这里插入图片描述

Python提供了多种实现图形用户界面(GUI)编程的技术,下面我将详细介绍几种主流技术,并提供示例代码和优劣分析。

1. Tkinter

在这里插入图片描述

简介

Tkinter是Python的标准GUI库,基于Tk工具包,是Python自带的库,无需额外安装。

示例代码

import tkinter as tk
from tkinter import messageboxdef on_click():messagebox.showinfo("提示", f"你好, {entry.get()}!")root = tk.Tk()
root.title("Tkinter示例")label = tk.Label(root, text="请输入你的名字:")
label.pack()entry = tk.Entry(root)
entry.pack()button = tk.Button(root, text="点击", command=on_click)
button.pack()root.mainloop()

优势

  • Python标准库,无需额外安装
  • 跨平台支持(Windows, Linux, Mac)
  • 简单易学,适合初学者
  • 轻量级,启动快速

劣势

  • 界面外观较老旧,现代化程度低
  • 功能相对较少
  • 自定义样式较复杂
  • 性能在处理复杂界面时可能不足

2. PyQt/PySide

简介

PyQt和PySide都是Qt框架的Python绑定,功能强大,适合开发专业级应用程序。

示例代码(PyQt5)

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("PyQt示例")layout = QVBoxLayout()self.label = QLabel("请输入你的名字:")layout.addWidget(self.label)self.entry = QLineEdit()layout.addWidget(self.entry)self.button = QPushButton("点击")self.button.clicked.connect(self.on_click)layout.addWidget(self.button)container = QWidget()container.setLayout(layout)self.setCentralWidget(container)def on_click(self):from PyQt5.QtWidgets import QMessageBoxQMessageBox.information(self, "提示", f"你好, {self.entry.text()}!")app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

优势

  • 功能非常强大,组件丰富
  • 界面美观,支持现代化UI设计
  • 良好的文档和社区支持
  • 支持信号/槽机制,事件处理优秀
  • 可以创建专业级应用程序

劣势

  • 需要额外安装(不是Python标准库)
  • 学习曲线较陡峭
  • 应用程序体积较大
  • 商业使用PyQt可能需要购买许可证(PySide是LGPL许可)

3. wxPython

简介

wxPython是wxWidgets的Python绑定,使用原生平台控件,提供原生外观。

示例代码

import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="wxPython示例")panel = wx.Panel(self)sizer = wx.BoxSizer(wx.VERTICAL)self.label = wx.StaticText(panel, label="请输入你的名字:")sizer.Add(self.label, 0, wx.ALL, 5)self.entry = wx.TextCtrl(panel)sizer.Add(self.entry, 0, wx.EXPAND|wx.ALL, 5)self.button = wx.Button(panel, label="点击")self.button.Bind(wx.EVT_BUTTON, self.on_click)sizer.Add(self.button, 0, wx.ALL, 5)panel.SetSizer(sizer)self.Show()def on_click(self, event):wx.MessageBox(f"你好, {self.entry.GetValue()}!", "提示")app = wx.App()
frame = MyFrame()
app.MainLoop()

优势

  • 使用原生控件,界面与操作系统风格一致
  • 跨平台支持良好
  • 功能丰富,介于Tkinter和PyQt之间
  • 开源且无商业许可问题

劣势

  • 文档和社区支持不如PyQt
  • 某些高级功能实现较复杂
  • 更新频率相对较低

4. Kivy

简介

Kivy是一个开源的Python库,用于开发多点触控应用程序,特别适合移动应用和游戏开发。

示例代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.popup import Popupclass MyApp(App):def build(self):layout = BoxLayout(orientation='vertical', spacing=10, padding=10)self.label = Label(text="请输入你的名字:")layout.add_widget(self.label)self.entry = TextInput(multiline=False)layout.add_widget(self.entry)self.button = Button(text="点击")self.button.bind(on_press=self.on_click)layout.add_widget(self.button)return layoutdef on_click(self, instance):content = BoxLayout(orientation='vertical')content.add_widget(Label(text=f"你好, {self.entry.text}!"))popup = Popup(title='提示', content=content, size_hint=(0.8, 0.4))popup.open()MyApp().run()

优势

  • 专为触摸屏设计,适合移动应用开发
  • 跨平台(包括Android和iOS)
  • 支持OpenGL ES 2,适合游戏开发
  • 可以创建高度自定义的UI

劣势

  • 桌面应用外观非原生
  • 学习曲线较陡
  • 性能开销较大
  • 不适合传统桌面应用开发

5. PySimpleGUI

简介

PySimpleGUI是对Tkinter、Qt、wxPython和Remi的封装,旨在简化GUI开发。

示例代码

import PySimpleGUI as sglayout = [[sg.Text("请输入你的名字:")],[sg.Input(key='-INPUT-')],[sg.Button("点击"), sg.Button("退出")]
]window = sg.Window("PySimpleGUI示例", layout)while True:event, values = window.read()if event in (sg.WIN_CLOSED, "退出"):breakif event == "点击":sg.popup(f"你好, {values['-INPUT-']}!")window.close()

优势

  • 极其简单易用
  • 统一了多种后端(Tkinter, Qt, wxPython, Web)
  • 代码量少,开发快速
  • 适合小型工具和快速原型开发

劣势

  • 功能有限,不适合复杂应用
  • 自定义能力较弱
  • 性能取决于后端选择

技术对比总结

技术学习曲线外观功能适合场景许可证
Tkinter简单老旧基础小型工具、教学Python
PyQt中等现代化丰富专业应用GPL/商业
PySide中等现代化丰富专业应用LGPL
wxPython中等原生中等桌面应用wxWindows
Kivy较难自定义特殊移动应用/游戏MIT
PySimpleGUI非常简单取决于后端简单小型工具/原型Apache

选择建议

  1. 初学者/小型工具:从Tkinter或PySimpleGUI开始
  2. 专业桌面应用:选择PyQt/PySide或wxPython
  3. 移动应用/游戏:考虑Kivy
  4. 快速原型开发:PySimpleGUI是最佳选择
  5. 需要原生外观:wxPython是好的选择

每种技术都有其适用场景,选择时应考虑项目需求、团队技能和长期维护计划。


http://www.hkcw.cn/article/jwfvmypKBR.shtml

相关文章

短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小程序的适配性研究——以抖音与快手为例

摘要 本文以抖音与快手两大短视频平台为研究对象,从用户群体、内容生态、推荐逻辑三维度分析其差异化特征,并探讨开源AI智能名片链动21模式与S2B2C商城小程序在平台适配中的创新价值。研究发现,抖音的流量中心化机制与优质内容导向适合品牌化…

线程间和进程间是如何进行通信

进程是由线程组成的,进程所拥有的功能线程全部具有,线程所拥有的功能进程不一定有,所有线程的通信方式,进程不一定有。 线程之间的通信主要有两种:共享内存和信息传递 (端口,方法调用等等) 进程之间的通…

wow Warlock shushia [Dreadsteed]

wow Warlock shushia [Dreadsteed] 克索诺斯恐惧战马坐骑的任务 在《魔兽世界》怀旧服中,术士大马任务,也就是获得克索诺斯恐惧战马坐骑的任务,是一个既充满挑战又极具成就感的系列任务。以下是详细的任务流程: 一、任务起始 ‌…

Axure 基础入门

目录 认识产品经理 项目团队* 基本概述 认识产品经理 A公司产品经理 B公司产品经理 C公司产品经理 D公司产品经理 产品经理工作范围 产品经理工作流程* 产品经理的职责 产品经理的分类 产品经理能力要求 产品工具 产品体验报告 原型设计介绍 原型设计概述 为…

快手可灵视频V1.6模型API如何接入免费AI开源项目工具

全球领先的视频生成大模型:可灵是首个效果对标 Sora 、面向用户开放的视频生成大模型,目前在国内及国际上均处于领先地位。快手视频生成大模型“可灵”(Kling),是全球首个真正用户可用的视频生成大模型,自面…

哈工大2024春csapp大作业——程序人生-Hello’s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 网络空间安全 学   号 2022110717 班   级 2203901 学 生 胡丁鹏     指 导 教 师 史先俊    计算机科学与…

程序人生的学习密码:终身学习促进职业生涯飞跃

程序人生的学习密码:终身学习促进职业生涯飞跃 关键词:终身学习、程序员成长、知识体系构建、学习方法论、技术迭代、职业发展、认知升级 摘要:在技术快速迭代的IT领域,程序员的职业生涯能否实现持续飞跃,核心在于是否构建了高效的终身学习体系。本文从认知科学和职业发展…

软件测试找工作|20道银行项目高频面试题

小编给大家上面试干货啦!把前两天整理的银行项目面试题系列汇总给你们复习吼! 先来看下面试题的目录叭...... 1、介绍一下贷款的项目? 贷款项目是银行业务中的重要组成部分,它是指银行向客户提供资金,让客户在约定的期…

【老张的程序人生】我命由我不由天:我的计算机教师中级岗之旅

在计算机行业的洪流中,作为一名20年计算机专业毕业的博主,我深知这几年就业的坎坷与辉煌。今天,我想与大家分享我的故事,一段关于梦想、挑战与坚持的计算机教师中级岗之旅。希望我的经历能为大家提供一个发展方向,在计…

程序人生-Hello’s P2P(2025)

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机与电子通信 学   号 2023111735 班 级 23L0509 学 生 杨祥锐 指 导 教 师 史先俊 …

程序人生-Hello‘s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 生命科学和医学学院 学   号 2023113108 班   级 2352001 学 生 杜若林 指 导 教 师 刘松波 计算机科学与技术…

2025哈工大计统PA-P2P程序人生

摘 要 作此论文的目的是为了了解程序从输入终端到在终端中显示运行的一系列过程。本文详细分析了计算机在生成hello可执行文件的预处理、编译、汇编、链接、进程管理等整个生命周期,解析了hello程序从初始状态输入到结束执行被回收的全部过程,查看并注…

程序人生Hello’s P2P CSAPP大作业

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学   号 2023112327 班   级 23L0509 学 生 朱永久      指 导 教 师 …

数据库系统概论(十五)详细讲解数据库视图

数据库系统概论(十五)数据库视图 前言一、什么是视图?二、视图的作用1. 保护数据安全2. 屏蔽表结构变化3. 简化复杂查询4. 多角度展示数据 三、如何创建视图?语法格式:5种常见视图类型: 四、更新视图的限制…

面向对象进阶 | 深入探究 Java 静态成员与继承体系

个人主页 文章专栏 文章目录 个人主页文章专栏 一、static(静态)1.static 静态变量代码展示内存图 2.static 静态方法工具类:练习: 3.static注意事项4.重新认识main方法 二、继承1.继承概述2.继承的特点3.子类到底能继承父类中的…

Python趣学篇:用Pygame打造绚烂流星雨动画

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《Python星球日记》 目录 一、项目简介与效果展示二、技术栈与核…

【大模型学习】项目练习:视频文本生成器

🚀实现视频脚本生成器 视频文本生成器 📚目录 一、游戏设计思路二、完整代码解析三、扩展方向建议四、想说的话 一、⛳设计思路 本视频脚本生成器采用模块化设计,主要包含三大核心模块: 显示模块:处理用户输入和…

BFS每日刷题

目录 P1332 血色先锋队 173. 矩阵距离 P1162 填涂颜色 P1506 拯救oibh总部 P2895 [USACO08FEB] Meteor Shower S P3395 路障 P1332 血色先锋队 #include <iostream> #include <cstring> #include <queue> using namespace std; int dis[600][600]; in…

中国城市规模指数(1992-2023)

1816 中国城市规模指数(1992-2023) 数据简介 中国城市规模指数&#xff0c;参考丁从明等&#xff08;2020&#xff09;的做法&#xff0c;通过中国夜间灯光数据&#xff0c;提取其中各城市夜间灯光值大于等于22的区域取其平均值&#xff0c;再取其自然对数即为城市规模指数数…

基于贝叶斯优化神经网络的光伏功率预测综述

基于贝叶斯优化神经网络的光伏功率预测综述 一、贝叶斯优化的基本原理与核心组件 贝叶斯优化&#xff08;Bayesian Optimization, BO&#xff09;是一种基于概率模型的全局优化方法&#xff0c;特别适用于高成本评估的黑盒函数优化问题。其核心由代理模型和采集函数构成&…