城市粉碎模拟器2最新版本
116.76MB · 2025-11-02
你是不是也觉得Python好是好,就是做个带界面的桌面应用太费劲了,是时候打破这个刻板印象了。如今的Python在GUI开发领域早就不是吴下阿蒙了。今天介绍的Python GUI库都可以打造炫酷的应用。
在此之前,我们先搞定一切的基础 —— 开发环境。项目一多,Python版本就成了个头疼事。老项目可能还跑在Python 2.7上,新项目又想用最新的3.12特性,来回切换环境能把人折腾死。
那就不得不安利ServBay了,它能一键安装和管理N个Python版本,支持从老掉牙的2.7到最新的3.14。不管是维护祖传代码,还是开发新项目,都不用再为Python版本兼容性问题挠头了。环境搞定了,咱们才能安心搞开发。
好了,言归正传,来看看有库能让我们的Python应用改头换面。
只要安装了Python,就有了Tkinter。作为Python的原配,它最大的优点就是不用装,直接用。虽然界面看起来有点古早,但做点内部用的小工具、简单的管理界面,绝对是够用的。胜在稳定、轻量,而且资料多,遇到问题随便一搜就是一大把解决方案。
特点:
import tkinter as tk
from tkinter import messagebox
def show_greeting():
messagebox.showinfo("问候", "你好,来自Tkinter的世界!")
# 创建主窗口
window = tk.Tk()
window.title("我的第一个Tkinter应用")
window.geometry("300x150")
# 创建一个按钮
greet_button = tk.Button(window, text="点我打个招呼", command=show_greeting)
greet_button.pack(pady=40)
# 启动事件循环
window.mainloop()
如果觉得Tkinter有点啰嗦,界面也不够好看,那可以试试PySimpleGUI。它把Tkinter(以及Qt, WxPython等)复杂的部分都包装起来了,用几行代码就能搭出一个看起来还不错的界面。它的逻辑非常直观,就是通过各种元素堆叠出一个布局,然后用一个事件循环来处理用户操作。
特点:
import PySimpleGUI as sg
# 定义窗口布局
layout = [
[sg.Text("请输入你的大名:")],
[sg.InputText(key='-NAME-')],
[sg.Button("确定"), sg.Button("退出")]
]
# 创建窗口
window = sg.Window("PySimpleGUI 示例", layout)
# 事件循环
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == '退出':
break
if event == '确定':
sg.popup(f"你好, {values['-NAME-']}!")
window.close()
Flet就厉害了,它能用Python直接调用Google的Flutter引擎来构建UI,不用通过Dart语言,就能做出拥有Flutter级别精美UI和流畅动画的应用。更牛的是,它天生跨平台,一套代码可以跑在桌面、Web甚至手机上。
特点:
基于Flutter,UI精美,性能优秀。
真正的跨平台,Web、桌面、移动端通吃。
对于想尝试Flutter又不想学Dart的Pythonista来说是绝配。
import flet as ft
import time
def main(page: ft.Page):
page.title = "Flet 计数器"
page.vertical_alignment = ft.MainAxisAlignment.CENTER
txt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)
def minus_click(e):
txt_number.value = str(int(txt_number.value) - 1)
page.update()
def plus_click(e):
txt_number.value = str(int(txt_number.value) + 1)
page.update()
page.add(
ft.Row(
[
ft.IconButton(ft.icons.REMOVE, on_click=minus_click),
txt_number,
ft.IconButton(ft.icons.ADD, on_click=plus_click),
],
alignment=ft.MainAxisAlignment.CENTER,
)
)
ft.app(target=main)
NiceGUI的思路很巧妙。它在底层用了FastAPI和Vue.js这些成熟的Web技术,但把它们都藏起来了。只需要用Python写前端逻辑,它会自动生成一个漂亮的Web界面。这个界面既可以在浏览器里访问,也可以打包成一个独立的桌面应用。非常适合做数据看板、Web小工具这类应用。
特点:
只写Python,就能得到一个现代化的Web UI。
部署灵活,既是网站,也是桌面应用。
非常适合需要网络交互和漂亮UI的内部工具。
from nicegui import ui
def handle_greet():
ui.notify(f'你好啊, {name_input.value}!')
ui.label('请输入你的名字:')
name_input = ui.input(placeholder='在这里输入...')
ui.button('打招呼', on_click=handle_greet)
ui.run()
如果你本身就是个前端高手,熟悉HTML/CSS/JS,那么PyWebview简直是为你量身定做的,买它!它能创建一个轻量级的原生窗口,然后在里面加载Web页面。和重量级的Electron不同,它用的是操作系统自带的WebView控件,所以打包出来的应用体积非常小。Python和JavaScript之间还能互相调用函数,实现前后端交互。
特点:
import webview
import threading
import time
def background_task(window):
"""一个在后台运行的Python函数,可以与JS交互"""
time.sleep(5)
window.evaluate_js('alert("Python在5秒后向你问好!");')
if __name__ == '__main__':
window = webview.create_window(
'PyWebview 示例',
html='<h1>这是一个本地HTML内容</h1><p>等待Python的消息...</p>'
)
# 启动后台线程
thread = threading.Thread(target=background_task, args=(window,))
thread.start()
webview.start()
Dear PyGui是个狼灭,直接使用GPU进行渲染,性能炸裂,就像游戏引擎里的UI系统一样。这使得它在处理需要高速刷新、数据量巨大的场景时(比如数据可视化、实时图表、开发工具)游刃有余。它的API是立即模式(Immediate Mode),写法和传统GUI有点不一样,但习惯了之后会觉得非常直观。
特点:
import dearpygui.dearpygui as dpg
dpg.create_context()
def save_callback(sender, app_data):
user_input = dpg.get_value("input_text")
print(f"用户输入的内容是: {user_input}")
dpg.set_value("output_text", f"已保存: {user_input}")
with dpg.window(label="Dear PyGui 示例", width=400, height=200):
dpg.add_input_text(label="输入点什么", tag="input_text")
dpg.add_button(label="保存", callback=save_callback)
dpg.add_text("", tag="output_text")
dpg.create_viewport(title='我的应用', width=420, height=240)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
Kivy从设计之初就考虑了多点触控。它的目标是“一次编码,处处运行”,尤其擅长在Windows, macOS, Linux, Android和iOS上构建应用。它有自己的一套UI渲染引擎,不依赖原生控件,所以能保证在所有平台上的外观和行为都完全一致。如果你想用Python开发一个手机App或者触摸屏应用,Kivy绝对是首选之一。
特点:
专为触摸屏和多点触控设计。
强大的跨平台能力,尤其是在移动端。
UI外观在所有平台保持一致。
from kivy.app import App
from kivy.uix.button import Button
class MyApp(App):
def build(self):
return Button(
text='这是一个Kivy按钮',
font_size='24sp',
on_press=self.btn_press
)
def btn_press(self, instance):
instance.text = '我被按了一下!'
if __name__ == '__main__':
MyApp().run()
Toga是BeeWare项目的一部分,它的哲学和Kivy正好相反。Toga追求的是在每个平台上都使用系统原生的UI控件。这意味着你的应用在Windows上看起来就像个标准的Windows程序,在macOS上就有地道的macOS范儿。这种方式能给用户带来最熟悉、最亲切的操作体验。
特点:
使用平台原生控件,用户体验好。
BeeWare套件的一部分,生态完整。
跨平台,但追求平台原生外观。
import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW
class TogaApp(toga.App):
def startup(self):
main_box = toga.Box(style=Pack(direction=COLUMN))
name_label = toga.Label("你的名字: ", style=Pack(padding=(0, 5)))
self.name_input = toga.TextInput(style=Pack(flex=1))
name_box = toga.Box(style=Pack(direction=ROW, padding=5))
name_box.add(name_label)
name_box.add(self.name_input)
button = toga.Button(
"打个招呼",
on_press=self.say_hello,
style=Pack(padding=5)
)
main_box.add(name_box)
main_box.add(button)
self.main_window = toga.MainWindow(title=self.formal_name)
self.main_window.content = main_box
self.main_window.show()
def say_hello(self, widget):
self.main_window.info_dialog(
'问候',
f'你好, {self.name_input.value}'
)
def main():
return TogaApp('你好 Toga', 'org.example.hellotoga')
if __name__ == '__main__':
main().main_loop()
最后这个Gooey,思路清奇。它不是让你从头写一个GUI,而是把你现成的命令行工具(CLI)一键变成一个GUI应用。你只需要在你的主函数上加一个装饰器,它就能自动根据你的argparse参数定义,生成一个简单明了的图形界面。对于那些写了很多命令行工具,又想让非技术人员也能轻松使用的开发者来说,这简直是天降神器。
特点:
将命令行程序秒变GUI。
零成本改造现有项目。
对argparse支持完美。
from gooey import Gooey, GooeyParser
@Gooey(program_name="一个简单的计算器")
def main():
parser = GooeyParser(description="输入两个数,我来帮你加起来")
parser.add_argument('num1', type=int, help='第一个数字')
parser.add_argument('num2', type=int, help='第二个数字')
args = parser.parse_args()
result = args.num1 + args.num2
print(f"计算结果是: {result}")
# 在GUI模式下,print的内容会显示在一个文本框里
if __name__ == '__main__':
main()
Python的GUI库还是有很多很好用的。
无论你的需求是什么,总能找到合适的轮子。下次再有人说Python做不了桌面应用,就把这篇文章甩给他!