0

0

(九)Python GUI的基本框架

蓮花仙者

蓮花仙者

发布时间:2025-08-17 08:10:02

|

814人浏览过

|

来源于php中文网

原创

目录

基本框架

组件

事件处理机制

 GUI常用组件

立即学习Python免费学习笔记(深入)”;

按钮

菜单

菜单常用事件

静态文本和文本框

列表

单选与复选框 

 布局管理

 sizer

使用sizer的步骤

其他GUI库

PyQt

Tkinter

PyGTK


基本框架

创建一个简单的wxPython程序

代码语言:javascript代码运行次数:0运行复制
import wxapp = wx.App()  # 创建应用程序对象frame = wx.Frame(None, title = "Hello, World!") #创建一个框架frame.Show(True)    # 显示窗口app.MainLoop()  # 进入事件循化

运行结果如下所示:

(九)Python GUI的基本框架

利用我们之前讲的面向对象的方法,可以对这个代码进行修改,修改之后的代码如下所示:

vue-store高仿小米商城
vue-store高仿小米商城

本项目前后端分离,前端基于Vue+Vue-router+Vuex+Element-ui+Axios,参考小米商城实现。后端基于Node.js(Koa框架)+Mysql实现。前端包含了11个页面:首页、登录、注册、全部商品、商品详情页、关于我们、我的收藏、购物车、订单结算页面、我的订单以及错误处理页面。实现了商品的展示、商品分类查询、关键字搜索商品、商品详细信息展示、登录、注册、用户购物车、订单结算

下载
代码语言:javascript代码运行次数:0运行复制
import wxclass MyApp(wx.App):    # 从App类里生子类    def OnInit(self):   # 定义初始化方法        frame = wx.Frame(None, title="Hello, World!")   # 创建一个框架        frame.Show()    # 显示窗口        return Trueif __name__ == '__main__':    app = MyApp()   # 执行初始化方法    app.MainLoop()
组件组件容器(Containers)——用于容纳其他组件 – 例:wx.Panel等 动态组件(Dynamic Widgets)——可以被用户编辑 – 例:wx.Button、wx.TextCtrl、wx.ListBox等静态组件(Static Widgets)——显示信息用,不能被用户编辑 – 例:wx.StaticBitmap、wx.StaticText、wxStaticLine等 其他组件 – 例:wx.ToolBar、wx.MenuBar、wx.StatusBar

 具体的使用方法,如下所示:

代码语言:javascript代码运行次数:0运行复制
import wxclass Frame1(wx.Frame):    def __init__(self, superior):   # 修改了原来Frame子类的__init__()方法        wx.Frame.__init__(self, parent=superior, title="一个可以输入的文本框", pos=(100, 200), size=(350, 200))        # 进行窗口标题、位置、大小的设置        panel = wx.Panel(self)  # 通过Panel、TextCtrl增加一个文本输入框的位置        text1 = wx.TextCtrl(panel, value="Hello, World!", size=(350, 200))        # 把初始的文本内容设置为Hello, World!if __name__ == '__main__':    app = wx.App()    frame = Frame1(None)    frame.Show(True)    app.MainLoop()

运行结果如下所示:

(九)Python GUI的基本框架
事件处理机制GUI程序工作的基本机制之一——事件处理事件 – 移动鼠标,按下鼠标左键、单击按钮等– 可以由用户操作触发产生,也可以在程序中创建对象产生 wxPython程序将特定类型的事件关联到特定的一块代码(方法),当 该类型的事件产生时,相关代码将响应事件被自动执行  – 例:当产生鼠标移动事件时,OnMove()方法将被自动调

具体代码如下所示:

代码语言:javascript代码运行次数:0运行复制
import wxclass Frame1(wx.Frame):    def __init__(self, superior):  # 修改了原来Frame子类的__init__()方法        wx.Frame.__init__(self, parent=superior, title="一个可以输入的文本框", pos=(100, 200), size=(350, 200))        # 进行窗口标题、位置、大小的设置        self.panel = wx.Panel(self)  # 通过Panel、TextCtrl增加一个文本输入框的位置        # text1 = wx.TextCtrl(self.panel, value="Hello, World!", size=(350, 200))        # 把初始的文本内容设置为Hello, World!        self.panel.Bind(wx.EVT_LEFT_UP, self.OnClick)        # 将鼠标左键抬起事件(EVT_LEFT_UP)绑定到派生出的子类onClick()方法上    def OnClick(self, event):        posm = event.GetPosition()  # 获得鼠标单击的位置        wx.StaticText(parent=self.panel, label="Hello, World!", pos=(posm.x, posm.y))        # 放置一个静态的文本文件if __name__ == '__main__':    app = wx.App()    frame = Frame1(None)    frame.Show(True)    app.MainLoop()

运行结果如下所示:

(九)Python GUI的基本框架
 GUI常用组件按钮功能:接受用户的点击事件,触发相应的操作。常用按钮: – wx.Button:文本按钮– wx.BitmapButton:位图按钮– wx.ToggleButton:开关按钮绑定处理按钮点击的事件菜单菜单 – 菜单栏– 菜单– 菜单项命令 wxPython用于创建菜单的类 – wx.MenuBar– wx.Menu– wx.MenuItem 菜单常用事件

菜单事件 – wx.EVT_MENU

代码语言:javascript代码运行次数:0运行复制
…#绑定事件处理器    self.Bind(wx.EVT_MENU,self.OnClickBigger,biggerItem)    self.Bind(wx.EVT_MENU,self.OnClickQuit,id=wx.ID_EXIT)…#事件处理器def OnClickBigger(self,e):    passdef OnClickQuit(self,e):    self.Close()…
静态文本和文本框文本框用于接收用户在框内输入的信息,或显示由程序提供的信息 静态文本框(标签): – 类:wx.StaticText 文本框: – 类:wx.TextCtrl– 常用形式:单行,多行,富文本框列表列表用于显示多个条目并且可供用户选择 列表能够以下面四种不同模式建造: – wx.LC_ICON(图标)– wx.LC_SMALL_ICON(小图标)– wx.LC_LIST(列表)– wx.LC_REPORT (报告)单选与复选框  复选框用于从一组可选项中, 同时选中多个选项 对应的,单选框用于从一组互 斥的选项中,选取其一

具体实现如下代码所示,因为后续还会详细分析这段代码,就不展示运行结果。 

代码语言:javascript代码运行次数:0运行复制
import wxclass Frame1(wx.Frame):    def __init__(self, parent):        wx.Frame.__init__(self, parent, title="Hello World in wxPython")        panel = wx.Panel(self)        sizer = wx.BoxSizer(wx.VERTICAL)        self.text1 = wx.TextCtrl(panel, value="Hello, World!", size=(200, 180), style=wx.TE_MULTILINE)        # 创建了一个TextCtrl实例,也就是在panel中添加了一个文本框        sizer.Add(self.text1, 0, wx.ALIGN_TOP | wx.EXPAND)        button = wx.Button(panel, label="Click Me")        # 创建了一个Button实例,也就是在panel中添加了一个按钮        sizer.Add(button)        panel.SetSizerAndFit(sizer)        panel.Layout()        self.Bind(wx.EVT_BUTTON, self.OnClick, button)        # 把Button事件绑定在frame的OnClick()方法上        self.Show(True)    def OnClick(self, text):        self.text1.AppendText("\nHello, World!")  # 添加字符串if __name__ == '__main__':    app = wx.App()    frame = Frame1(None)    app.MainLoop()
 布局管理绝对定位  每个窗口组件被创建时可以显式地指定它的位置和大小 缺点:定位不灵活      调整大小困难     受设备、操作系统甚至字体影响 灵活布局的解决方案  sizer – 每个sizer有自己的定位策略 开发者只需要选择合适策略的sizer将窗口组件放入,并且指定好需求即可 sizer sizer本身不是一个容器或一个窗口组件。它只是一个屏幕布局的算法 sizer允许嵌套 wxPython常用的sizer – wx.BoxSizer(在一条线上布局子窗口部件)– wx.FlexGridSizer(行高和列宽由最大的组件决定)– wx.GridSizer(所有组件大小一致, 固定一个方向,在 另外一个方向生长)– wx.GridBagSizer使用sizer的步骤创建自动调用尺寸的容器,例如panel创建sizer创建子窗口(窗体组件)使用sizer的Add()方法将每个子窗口添加给sizer 调用容器的SetSizer(sizer)方法

具体代码如下所示:

代码语言:javascript代码运行次数:0运行复制
import wxclass Frame1(wx.Frame):    def __init__(self, parent):        wx.Frame.__init__(self, parent, title="Hello World in wxPython")        panel = wx.Panel(self)  # 首先创建自动调用尺寸的容器        sizer = wx.BoxSizer(wx.VERTICAL)    # 第二是创建一个sizer,这是一个BoxSizer的实例,方向是垂直方向        self.text1 = wx.TextCtrl(panel, value="Hello, World!", size=(200, 180), style=wx.TE_MULTILINE)        # 第三是创建窗口组件,创建了一个TextCtrl实例,也就是在panel中添加了一个文本框        sizer.Add(self.text1, 0, wx.ALIGN_TOP | wx.EXPAND)        # 第四是使用add方法加到sizer        button = wx.Button(panel, label="Click Me")        # 第三是创建窗口组件,创建了一个Button实例,也就是在panel中添加了一个按钮        sizer.Add(button)        panel.SetSizerAndFit(sizer)        # 最后调用容器的SetSizer()方法        panel.Layout()        self.Bind(wx.EVT_BUTTON, self.OnClick, button)        # 把Button事件绑定在frame的OnClick()方法上        self.Show(True)    def OnClick(self, text):        self.text1.AppendText("\nHello, World!")  # 添加字符串if __name__ == '__main__':    app = wx.App()    frame = Frame1(None)    app.MainLoop()

 运行结果如下所示:

(九)Python GUI的基本框架
其他GUI库PyQt是Python语言的GUI编程解决方案之一提供了GPL与商业协议两种授权方式,可以免费地用于自由软 件的开发跨平台:可以运行于Microsoft Windows、Mac OS X、Linux 以及其它类Unix平台上 

具体代码如下所示:

代码语言:javascript代码运行次数:0运行复制
import sysfrom PyQt5 import QtWidgetsclass TestWidget(QtWidgets.QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("Hello World!")        self.outputArea = QtWidgets.QTextBrowser()        self.helloButton = QtWidgets.QPushButton("Click Me")        self.layout = QtWidgets.QVBoxLayout()        self.layout.addWidget(self.outputArea)        self.layout.addWidget(self.helloButton)        self.setLayout(self.layout)        self.helloButton.clicked.connect(self.sayHello)    def sayHello(self):        self.outputArea.append("Hello, World!")if __name__ == '__main__':    app = QtWidgets.QApplication(sys.argv)    testWidget = TestWidget()    testWidget.show()    sys.exit(app.exec_())

 运行结果如下所示:

(九)Python GUI的基本框架

优点:

文档比其他GUI库丰富与Qt、C++开发经验互通可使用大多数为Qt开发的组件有方便的周边工具支持PyQt, 如QtDesigner,Eric4

缺点:

要注意避免内存泄露运行时庞大需要学习一些C++知识TkinterTkinter绑定了 Python 的 Tk GUI 工具集 ,通过内嵌在 Python 解释器内部的 Tcl 解释器实现  Tkinter 的调用转换成 Tcl 命令,然后交给 Tcl 解释器进行解释, 实现 Python 的 GUI 界面

具体代码如下所示:

代码语言:javascript代码运行次数:0运行复制
import tkinter as tkclass Tkdemo(object):    def __init__(self):        self.root = tk.Tk()        self.txt = tk.Text(self.root, width=30, height=10)        self.txt.pack()        self.button = tk.Button(self.root, text='Click me', command=self.sayhello)        self.button.pack()    def sayhello(self):        self.txt.insert(tk.INSERT, "Hello, World!\n")d = Tkdemo()d.root.mainloop()

 运行结果如下所示:

(九)Python GUI的基本框架

 优点:

历史最悠久, 是Python 事实上的标准GUI Python 中使用TkGUI工具集的标准接口,已包括在标准的Python Windows 安装中著名的 IDLE 用 Tkinter 实现 GUI创建的 GUI 简单,学起来和用起来也简单

缺点:

性能不太好, 执行速度慢PyGTKPyGTK是一套GTK+ GUI库的Python封装pyGTK为创建桌面程序提供了一套综合的图形元素和其它使用的编程工具PyGTK是基于LGPL协议的免费软件许多 Gnome 下的著名应用程序的 GUI 都是使用 PyGTK 实现的,比如 BitTorrent , GIMP 和 Gedit 都有可选的实现

在此就不展示PyGTK的代码,感兴趣的同学可以自己去学习。

优点:

底层的GTK+提供了各式的可视元素和功能能开发在GNOME桌面系统运行的功能完整的软件

缺点:

在Windows平台表现不太好

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

778

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

685

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

769

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

739

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1445

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

571

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

580

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

752

2023.08.11

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

14

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.8万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号