Python之wxPython框架的使用
Python之wxPython框架的使用
- 一、安装wxPython
- 二、创建一个 wx.App 的子类
- 三、直接使用wx.App
- 四、使用wx.Frame 框架
- 五、常用控件
- 1.Static Text 文本类
- 2.TextCtrl 输入文本类
- 3.Button 按钮类
一、安装wxPython
wxPython是个成熟而且特性丰富的跨平台GUI工具包。由Robin Dunn 和Harri Pasanen开发,官方网站:http://wxpython.org。wxPython安装非常简单,使用pip工具安装wxPython只需要一个命令:
pip install -U wxPthon
在Windows的cmd命令下,使用pip安装wxPython如下图所示:
二、创建一个 wx.App 的子类
在开始创建应用程序之前,先来创建一个没有任何功能的子类。创建和使用一个 wx.App 的子类,需要执行如下4个步骤:
(1)定义这个子类。
(2)在定义的子类中写一个Onlnit()初始化方法。
(3)在程序的主要部分创建这个类的一个实例。
(4)调用应用程序实例的MainLoop()方法,这个方法将程序的控制权转交给wxPython。
创建一个没有任何功能的子类,具体代码如下:
# _*_ coding:utf-8 _*_
import wx # 导入wxPythonclass App(wx.App):# 初始化方法def OnInit(self):frame = wx.Frame(parent=None, title="Hello wyPython") # 创建窗口frame.Show() # 显示窗口return True # 返回值if __name__ == "__main__":app = App() # 创建APP类的实例app.MainLoop() # 调用App类的MainLoop()主循环方法
上述代码中,定义了一个子类App(),它继承父类wx.App,子类中包含一个初始化方法OnInit()。在主程序中创建类的实例,然后调用MainLoop()主循环方法,运行结果如图所示:
三、直接使用wx.App
通常,如果在系统中只有一个窗口的话,可以不创建wx.App子类,直接使用wx.App。这个类提供了一个最基本的OnInit()初始化方法,具体代码如下:
# _*_ coding:utf-8 _*_
import wx # 导入wxPythonapp = wx.App() # 初始化wx.App类
frame = wx.Frame(None, title="Hello wyPython") # 定义一个顶级窗口
frame.Show() # 显示窗口
app.MainLoop() # 调用wx.App类的MainLoop()主循环方法
上述代码中,wx.App()初始化wx.App类,包含了OnInit()方法,运行结果与上图相同。
四、使用wx.Frame 框架
在GUI中框架通常也称为窗口。框架是一个容器,用户可以将它在屏幕上任意移动,并可对它进行缩放,它通常包含诸如标题栏、菜单等等。在wxPython中,wx.Frame是所有框架的父类。当创建wx.Frame的子类时,子类应该调用其父类的构造器wx.Frame.__ init __()。wx.Frame的构造器语法格式如下:
wx.Frame(parent, id=-1, title="", pos=wx.DefaultPosition, size=wx.DefaultSize,style=wx.DEFAULT_DIALOG_STYLE, name="frame")
参数说明:
- parent:框架的父窗口。如果是顶级窗口,这个值是None。
- id:关于新窗口的wxPython ID 号。通常设置为-1,让wxPython 自动生成一个新的ID。
- title:窗口的标题。
- pos:一个wx.Point对象,它指定这个新窗口的左上角在屏幕中的位置。在图形用户界面程序中,通常(0,0)是显示器的左上角。这个默认的(-1,-1)将让系统决定窗口的位置。
- size:一个wx.Size对象,它指定这个窗口的初始尺寸。这个默认的(-1,-1))将让系统决定窗口的初始尺寸。
- style:指定窗口的类型的常量。可以使用或运算来组合它们。
- name:框架的内在的名字。可以使用它来寻找这个窗口。
创建wx.Frame 子类的代码如下:
# _*_ coding:utf-8 _*_
import wx # 导入wxPythonclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title="创建Frame", pos=(100, 100), size=(300, 300))if __name__ == "__main__":app = wx.App() # 初始化应用frame = MyFrame(parent=None, id=-1) # 实例化MyFrame,并传递参数frame.Show() # 显示窗口app.MainLoop() # 调用MainLoop()主循环方法
上述代码中,在主程序中调用MyFrame类,并且传递2个参数。在MyFrame类中,自动执行__init__()初始化方法,接收参数。然后调用父类wx.Frame的__init__()初始化方法,设置顶级窗口的相关属性。运行结果如果所示:
五、常用控件
创建完窗口以后,我们可以在窗口内添加一些控件,所谓的控件,就是经常使用的按钮、文档、输入框、单选框等。
1.Static Text 文本类
对于所有的UI工具来说,最基本的任务就是在屏幕上绘制纯文本。在wxPython中,可以使用wx.StaticText类来完成。使用wx.StaticText类能够改变文本的对齐方式、字体和颜色等。wx.StaticText类的构造函数语法格式如下:
wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSizestyle = 0, name = "staticText")
参数说明:
- parent:父窗口部件。
- id:标识符。使用-1可以自动创建一个唯一的标识。
- label:显示在静态控件中的文本内容。
- pos:一个wx.Point或一个Python元组,它是窗口部件的位置。
- size:一个wx.Size或一个Python元组,它是窗口部件的尺寸。
- style:样式标记。
- name:对象的名字。
示例:使用wx.StaticText输出Python之禅
在Python控制台输入import this后,会说出如图所示的结果,结果中的英文就是通常所示的Python之禅。
下面使用StaticText类输出中午版的Python之禅。具体代码如下:
# _*_ coding:utf-8 _*_
import wxclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title="创建StaticText类",pos=(100, 100), size=(600, 400))panel = wx.Panel(self) # 创建画板# 创建标题,并设置字体title = wx.StaticText(panel, label="Python之禅-Tim Peters", pos=(100, 20))font = wx.Font(16, wx.DEFAULT, wx.FONTSTYLE_NORMAL, wx.NORMAL)# 创建文本wx.StaticText(panel, label="优美胜于丑陋", pos=(50, 50))wx.StaticText(panel, label="明了胜于晦涩", pos=(50, 70))wx.StaticText(panel, label="简洁胜于复杂", pos=(50, 90))wx.StaticText(panel, label="复杂胜于凌乱", pos=(50, 110))wx.StaticText(panel, label="扁平胜于嵌套", pos=(50, 130))wx.StaticText(panel, label="间隔胜于紧凑", pos=(50, 150))wx.StaticText(panel, label="可读性很重要", pos=(50, 170))wx.StaticText(panel, label="即便假借特例的实用之名,也不可违背这些规则", pos=(50, 190))wx.StaticText(panel, label="不要包容所以错误,除非你确定需要这样做", pos=(50, 210))wx.StaticText(panel, label="当存在多种可能,不要尝试去猜测", pos=(50, 230))wx.StaticText(panel, label="而是尽量找一种,最好是唯一一种明显的解决方案", pos=(50, 250))wx.StaticText(panel, label="虽然这并容易,因为你不是Python之父", pos=(50, 270))wx.StaticText(panel, label="做也许好过不做,但不假思索就动手还不如不做", pos=(50, 290))wx.StaticText(panel, label="如果你无法描述你的方案,那肯定不是一个好方案;反之亦然", pos=(50, 310))wx.StaticText(panel, label="命名空间是一种绝妙的理念,我们应该多加利用", pos=(50, 330))if __name__ == "__main__":app = wx.App() # 初始化应用frame = MyFrame(parent=None, id=-1) # 实例MyFrame类,并传递参数frame.Show() # 显示窗口app.MainLoop() # 调用MainLoop()主循环方法
上述代码中,使用“ panel = wx.Panel(self)”语句来创建画板,并将panel作为父类,然后将组件放入窗体中。此外,使用wx.Font类设置字体。创建一个字体实例,需要使用如下构造函数:
wx.Font(pointSize, family, style, weight, underline=False,faceName="",encoding=wx.FONTFAMILY_DEFAULT)
参数说明:
- pointSize:字体的整数尺寸,单位为磅。
- family:用于快速指定一个字体而无须知道该字体实际的名字。
- style:指明字体是否倾斜。
- weight:指明字体的醒目程度。
- underline:仅在Windows系统下有效,如果取值为True,则加下划线;False为无下划线。
- faceName:指定字体名。
- encoding:允许在几个编程中选择一个,大多数情况可以使用默认编码。
运行结果如图所示:
2.TextCtrl 输入文本类
wx.StaticText类只能够用于显示纯粹的静态文本,但是有时需要输入文本与用户进行交互,此时,就需要使用wx.TextCtrl类,它允许输入单行和多行文本。它也可以作为密码输入控件,掩饰所按下的按键。
wx.TextCtrl类的构建函数语法格式如下:
wx.TextCtrl(parent, id, value="", pos=wx.DefaultPosition, size=wx.DefaultSize,style=0, validator=wx.DefaultValidator, name=wx.TextCtrlNameStr)
参数parent,id,pos,size,style和name与wx.StaticText构造函数相同,重点看一下其他参数。
- style:单行wx.TextCtrl的样式,取值及说明如下:
- wx.TE_CENTER:控件中的文本居中。
- wx.TE_LEFT:控件中的文本左对齐。默认行为。
- wx.TE_NOHIDESEL:文本始终高亮显示,只适用于Windows。
- wx.TE_PASSWORD:不显示所输入的文本,以星号(*)代替显示。
- wx.PROCESS_ENTER:如果使用改参数,那么当用户在控制键内按下键时,一个文本输入事件将被触发;否则,按键事件内在的由该文本控件或该对话框管理。
- wx.PROCESS_TAB:如果指定了这个样式,那么通常的字符事件在键按下时创建(一般意味一个制表符将被插入文本);否则,键由对话框来管理,通常是控件的切换。
- wx.TE_READONLY:文本控件为只读,用户不能修改其中的文本。
- wx.TE_RIGHT:控件的文本右对齐。
- value:显示在该控件中的初始文本。
- validator:常用用于过滤数据以确保只能键入要接受的数据。
示例:使用wx.TextCtrl类实现登录界面
使用wx.TextCtrl类和wx.StaticText类实现一个包含用户名和密码的登录界面。具体代码如下:
class MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title="创建TextCtrl类", size=(400, 300))# 创建面板panel = wx.Panel(self)# 创建文本和输入框self.title = wx.StaticText(panel, label="请输入用户名和密码", pos=(140, 20))self.label_user = wx.StaticText(panel, label="用户名:", pos=(50, 50))self.text_user = wx.TextCtrl(panel, pos=(100, 50), size=(235, 25), style=wx.TE_LEFT)self.label_pwd = wx.StaticText(panel, pos=(50, 90), label="密 码:")self.text_password = wx.TextCtrl(panel, pos=(100, 90), size=(235, 25), style=wx.TE_PASSWORD)if __name__ == "__main__":app = wx.App() # 初始化应用frame = MyFrame(parent=None, id=-1) # 实例MyFrame类,并传递参数frame.Show() # 显示窗口app.MainLoop() # 调用MainLoop()主循环方法
上述代码中,使用wx.TextCtrl类生成用户名,并且设置控件中的文本左对齐。使用wx.TextCtrl类生成密码,并且设置文本用星号代替。运行结果如图所示:
3.Button 按钮类
按钮是GUI界面中应用最为广泛的控制,它常用于捕获用户生成的点击事件,其明显的用途是触发绑定到一个处理函数。
wxPython类库提供不同类型的按钮,其中最简单、常用的是wx.Button类。wx.Button类的构造函数如下所示:
wx.Button(parent, id, label, pos, size=wx.DefaultSize, style=0, validator, name="botton")
wx.Button类的参数与wx.TextCtrl类的参数基本相同,其中label是显示在按钮上的文本。
示例:为登录页面添加“确定”和“取消”按钮
使用wx.Butto,在前一个实例的基础上添加“确定”和“取消”按钮,具体代码如下:
# _*_ coding:utf-8 _*_
import wxclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title="创建TextCtrl类", size=(400, 300))# 创建面板panel = wx.Panel(self)# 创建文本和输入框self.title = wx.StaticText(panel, label="请输入用户名和密码", pos=(140, 20))self.label_user = wx.StaticText(panel, label="用户名:", pos=(50, 50))self.text_user = wx.TextCtrl(panel, pos=(100, 50), size=(235, 25), style=wx.TE_LEFT)self.label_pwd = wx.StaticText(panel, pos=(50, 90), label="密 码:")self.text_password = wx.TextCtrl(panel, pos=(100, 90), size=(235, 25), style=wx.TE_PASSWORD)# 创建"确认"和"取消"按钮self.bt_confirm = wx.Button(panel, label="确认", pos=(105, 130))self.bt_cancel = wx.Button(panel, label="取消", pos=(195, 130))if __name__ == "__main__":app = wx.App() # 初始化应用frame = MyFrame(parent=None, id=-1) # 实例MyFrame类,并传递参数frame.Show() # 显示窗口app.MainLoop() # 调用MainLoop()主循环方法
运行结果如图所示:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/58362.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!相关文章:

Python之wxPython框架的使用
Python之wxPython框架的使用一、安装wxPython二、创建一个 wx.App 的子类三、直接使用wx.App四、使用wx.Frame 框架五、常用控件1.Static Text 文本类2.TextCtrl 输入文本类3.Button 按钮类一、安装wxPython wxPython是个成熟而且特性丰富的跨平台GUI工具包。由Robin Dunn 和Ha…...

量子密钥分发B92协议——笔记
一、B92介绍 (参照邓富国的博士论文) 1、什么是量子密钥分配(QKD) 通信双方以量子态为信息载体,利用量子力学原理,通过量子信道传送,在彼此之间建立共享密钥的方法。 2、B92协议简介&#x…...

TiFlash 数据校验
本文档介绍 TiFlash 的数据校验机制以及相关的工具。 使用场景 数据损坏通常意味着严重的硬件故障。在这种情形下,即使尝试自主修复,也会使得数据的可靠性下降。TiFlash 默认对数据文件进行基础的校验,使用固定的 City128 算法。一旦发现数…...

JavaWeb实战002-servlet原理
request 和 response 过程 request browser 使用 request 请求 tomcat,tomcat 根据 servlet 请求 webapp response webapp 返回给 tomcat,tomcat 再 response 给 browser 简单模拟 servlet 以下所有文件都在同一个目录下,目录结构ÿ…...

基于深度学习的命名实体识别研究综述——论文研读
基于深度学习的命名实体识别研究综述摘要:0引言1基于深度学习的命名实体识别方法1.1基于卷积神经网络的命名实体识别方法1.2基于循环神经网络的命名实体识别方法1.3基于Transformer的命名实体识别方法1.4其他的命名实体识别方法1.5基于深度学习的命名实体识别方法对…...

2022下半年数学建模竞赛汇总(比赛时间、出成绩时间)
1、2022年天府杯全国大学生数学建模国际赛 竞赛开始时间:2022年10月20日18:00 预计出成绩时间:2022年11月5日 是否可跨校:是 2、2022年中国高校大数据挑战赛 竞赛开始时间:2022年10月27日8:00 预计出…...

为什么python证券接口通达信系统中没有接口?
Python证券接口通达信是一种动态类型语言,拥有ducking type的特征,因此是天生支持接口。python有个自动保存到etcd的库,可以网上搜下看下这个库的使用以及它开发的api接口,不过之前go使用etcd的时候,是调用etcd本身的r…...

基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码系统数据库lw文档部署 基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码系统数据库lw文档部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:id…...

金橙子通过注册:年营收2亿净利5263万 拟募资4亿
雷递网 雷建平 10月4日北京金橙子科技股份有限公司(简称:“金橙子”)日前通过注册,准备在科创板上市。金橙子计划募资3.96亿元,其中,1.64亿元用于激光柔性精密智造控制平台研发及产业化建设项目,…...

(44)STM32——内存管理实验
目录 学习目标 原理 分配 释放 代码 内存管理控制器 内存管理宏定义 内存管理数组 总结 学习目标 本节我们要来学习的是内存管理实验,主要用来解决的问题其实和C语言中数组遇到的问题类似,就是我们不知道到底需要多少内存,为了避免…...

MySQL数据库——数据库是什么?关系型数据库和非关系型数据库又是什么?
在学习数据库之前,应该先理解什么是数据。下面介绍一下数据以及数据库的概念,再对关系型数据库和非关系型数据库的优缺点进行分析。 描述事物的符号称为数据。数据有多种表现形式,可以是数字,也可以是文字、图形、图像、声音、语…...

Spring Cloud Stream 学习笔记
Spring Cloud Stream 官方文档: https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/ 中文手册: https://m.wang1314.com/doc/webapp/topic/20971999.html 是什么? Spring Cloud Stream is a framework for buildi…...

langchain学习4
langchain学习4 原文地址: Chatbot Memory with Langchain | Pinecone An introduction to different conversational memory types for building chatbots and other intelligent …… Conversational memory 是聊天机器人能够以a chat-like manner 回应多个queries的方式。它…...

解决windows10资源管理器无限刷新、高占用的解决方法
首先是我使用Edge添加pdf笔记的时候,Edge浏览器自动崩溃,我就重新打开。于是就开始了疯狂的无限刷新,并且cpu高占用。如果不是因为这个原因导致的无限刷新,那么这个方法或许不适合。 这是一个关于浏览器读取pdf的一个bug 具体解…...

解决CSGO出现加载某些地图时,进入载入界面闪退游戏的问题
关于这个问题,我经过steam技术客服的回复后,关键问题在于: 我的内存不够用,导致游戏在加载地图资源的时候,内存溢出,导致游戏崩溃。你可以用WINX在事件查看器 -windows日志-应用程序 中看到csgo崩溃的时候留…...

【微信小程序云开发】解决云开发数据库调用产生的异步Promise数据问题和调用数据库存在20条上限的问题)
【微信小程序云开发】解决云开发数据库调用产生的异步Promise数据问题和调用数据库存在20条上限的问题项目场景:代码描述:结语:项目场景: 项目场景: 最近在开发一款查询类的微信小程序,由于使用的是小程序…...

[nextcloud]解决使用外部存储添加本地外置硬盘出现无法读写的问题
问题经过 由于我的nextcloud存储空间完全不够日常使用,于是我就用就固态硬盘安装到服务器上。并且我使用的nextcloud是通过snap安装部署的,所以使用命令设置会比较方便。但是我发现通过nextcloud设置页面添加的本地存储无法写入,在新添加的文…...

[DevEco]解决“XXX“is not translated into en(English) ans zh(Chinese)
问题描述:其实这个问题如字面意思,你在设置element/string.json的时候没有进行双语翻译,由于项目是国际版项目有中英双语string.json配置文件 问题解决:分别在en.element和zh.element的string.json中写入对应的配置,特…...

【华为机试】猴子爬山问题
题目描述: 一天一只顽猴想要从山脚爬到山顶 途中经过一个有n个台阶的阶梯,但是这个猴子有个习惯,每一次只跳1步或3步 试问?猴子通过这个阶梯有多少种不同的跳跃方式 输入描述 输入只有一个这个数n 0 < n < 50 此阶梯有多…...

【华为机试】GPU算力问题
题目描述: 为了充分发挥Gpu算力, 需要尽可能多的将任务交给GPU执行, 现在有一个任务数组, 数组元素表示在这1s内新增的任务个数, 且每秒都有新增任务, 假设GPU最多一次执行n个任务, 一次执行耗…...