Python图形用户界面(GUI)编程之wxPython入门

news2024/11/20 21:30:19

        图形用户界面主要是方便用户操作,Python开源的GUI类库还是蛮多的,这里介绍一款在Python语言中的一套优秀的GUI图形库,而且是跨平台的,现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。

安装很简单,最好指定国内镜像地址,下载速度非常快,这也是我建议任何使用pip下载的时候,都最好指定镜像站点,所以不建议 pip install -U wxPython 这样直接安装,因为国内访问国外站点速度比较慢,尤其下载的东西比较大的时候。

pip install -U wxPython -i http://pypi.douban.com/simple/  --trusted-host pypi.douban.com

 其中这里的-U就是升级的意思 --upgrade,如果已有安装那就升级到最新版

第一个GUI

安装好了之后,我们来创建一个最简单的用户界面,四条代码即可搞定,代码如下:

# 导入wxPython包
import wx

# 创建一个实例对象
app = wx.App()
# 创建窗口,设置标题
frm = wx.Frame(None, title="寅恪光潜")
# 显示
frm.Show()
# 启动主循环
app.MainLoop()

是不是很简单,导入wx包,然后创建窗口,显示出来即可。

其中的主循环的意思就是一直循环,接收用户的输入,比如点击了关闭按钮,界面就退出等

GUI填充内容

上面的骨架搭建好了,我们让它变得有血有肉,成为血肉之躯哈哈。
现在我们在这个界面里面增加一些内容,比如增加菜单栏、状态栏显示以及设置字体大小,颜色等等以及与界面有交互操作

import wx

class MyFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(MyFrame, self).__init__(*args, **kw)

        # 在窗口里面创建控制面板
        pnl = wx.Panel(self)

        # 面板里设置文本并设置字体相关
        st = wx.StaticText(pnl, label="你好,寅恪光潜!")
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)

        # BoxSizer来管理小部件的布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP | wx.LEFT, 25))
        pnl.SetSizer(sizer)

        # 调用下面创建菜单栏的方法
        self.makeMenuBar()

        self.CreateStatusBar()
        self.SetStatusText("这里是状态栏信息")

    def makeMenuBar(self):
        # 菜单项
        fileMenu = wx.Menu()

        helloItem = fileMenu.Append(-1, "&点我\tCtrl-H", "状态栏的帮助信息")
        fileMenu.AppendSeparator()
        # 库存ID,可以不指定标签,这里是Quit退出
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        # 菜单栏
        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&文件")
        menuBar.Append(helpMenu, "&帮助")

        # 框架显示菜单栏
        self.SetMenuBar(menuBar)

        # 菜单绑定事件
        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit,  exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        wx.MessageBox("再点我,就把你吃掉")

    def OnAbout(self, event):
        wx.MessageBox("这是我们创建的第一个真正意义上的GUI程序","帮助",wx.OK | wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App()
    frm = MyFrame(None, title='这里是标题')
    frm.Show()
    app.MainLoop()

 

这里主要是针对框架在里面增加面板,然后往里面添加东西,并创建了菜单栏,里面有菜单项,然后通过self.Bind()方法去绑定菜单项与事件,这样点击菜单项就出现相对应的动作来处理。
不过从这里我们可以看到,为了在里面增加一些东西,需要写很多代码之外,也不直观,最好是有一种其他语言一样可以直接拖拽与编辑的界面,接下来的一篇就是为此准备的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解密PDF文件?这些解密方法快来收藏

有时候我们为了确保PDF文档不被他人随意查看,会对文档进行加密操作。但如果需要给某位同事查看的话,就需要每次输入密码才能查看文档,那你们知道PDF文档解密怎么弄吗?今天给大家分享几种实用的PDF解密技巧,有需要的小伙…

同为(TOWE)远程智能防雷预警监测——交直流遥信防雷配电柜

当前,社会各领域中各类先进的电子仪器广泛分布于每一个角落,由于高精尖电子设备的高度集成化,其耐压水平普遍较低,导致雷电流、浪涌侵入设备的风险越来越高,故需要在重要设备前端加装浪涌保护器(SPD&#x…

vue3项目打包部署到Tomcat(亲测有效)

首先,要确保电脑上已经安装了jdk,还有Tomcat,而且都安装正确。 jdk下载与安装教程(win10) Tomcat 9.0 安装及配置教程(win10系统) Vue项目在VScode里面可以通过npm run serve可以正常运行。 下面是打包部署到tomca…

单体优先的微服务架构

作者:Martin Fowler 译者:林宁 当听说有团队在使用微服务架构时候,我注意到了一些规律: 几乎所有成功应用微服务的系统,都来自于一个过大单体项目拆分而来。几乎所有我听到过一开始就选择使用微服务架构的系统&#x…

【软件测试】测试开发?开发一个自动化测试系统如何做?

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 当我们开始分析一个…

ADI Blackfin DSP处理器-BF533的开发详解67:PCM的播放(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了打开代码工程目录下的“test.snd”文件,并读取 6MB 的数据到内存中,然后将内存中的数据进行循环…

C语言重点解剖第17课笔记

1.预处理阶段,先去注释,再宏替换。所以宏替换不能用于去注释。 #define bsc //就变成了一个空的宏。(//在这里面本来就是注释,只是注释后面的内容为空) 2.宏定义并不是简单的无脑替换。 printf(" ")中,双引号里面的东…

uniCloud云开发----3、uniApp中文件上传(通过插件(uniFilePicker)或者 uniCloud.uploadFile实现方案)

uniApp中文件上传前言效果图1、使用unifilePicker插件(1)安装unifilePicker插件(2)简单案例2、通过原生的 uniCloud.uploadFile来实现共同成长共同进步前言 uniapp图片上传插件unifilePicker 在开发uniapp的时候上传文件是必不可…

从月入5千到现在的月入1W+,会计转程序员,“谁说女的不适合学编程?”

前言 我毕业五年了,但与技术和 Python 相关的工作经验也就两年。今天我想跟大家分享自己转行的故事,希望能够鼓励那些跟我一样的朋友共同前行。 我们将会聊到我个人的经历和入行故事,讨论快速学习的方法,最后推荐一些学习资源。…

“互联网+”获奖项目专访 | 阿尔兹海默症患者辅助诊断研究分享

在本届“互联网”创新创业大赛中 昇思MindSpore群英荟萃团队荣获全国总决赛铜奖 本期有幸邀请到 团队负责人李鹏和指导老师胡悦进行采访 一起来看看夺奖背后的故事吧 PART ONE 团队介绍 群英荟萃团队 1. 项目成员 李鹏、周晨、邹静、纪雨萍、李晓迪、张英豪 2. 指导老…

Insight Enterprises EDI 850 采购订单报文详解

Insight Enterprises 是一家世界 500 强解决方案集成商,在全球拥有 11,500 多名员工,帮助企业加速数字化转型。Insight为管理其庞大的供应链建立了EDI(Electronic Data Interchange,中文名称是电子数据交换)系统&#…

Android 进阶——Framework 核心之Touch事件分发机制详细攻略(一)

文章大纲引言一、Android 事件分发概述二、Touch事件分发的对象MotionEvent三、分发事件的核心对象及方法1、分发事件的核心对象2、事件分发的核心方法四、Touch事件分发的流程1、Activity的事件处理流程2、ViewGroup&View的事件分发流程五、事件分发的应用1、事件拦截2、响…

刨根问底Kafka 40问,看看你能坚持到第几问

Kafka最初是由Linkedin公司开发的,是一个分布式的、可扩展的、容错的、支持分区的(Partition)、多副本的(replica)、基于Zookeeper框架的发布-订阅消息系统,Kafka适合离线和在线消息消费。它是分布式应用系…

【JavaSE】内部类

目录 前言: 内部类 什么是内部类? 内部类的分类 1、静态内部类 1、静态内部类,不能直接被实例化 2、 静态内部类当中,不能直接访问外部类的非静态成员,但是可以直接访问外部类的静态成员。 3、外部类可以访问静…

java -数据结构 - 集合框架及背后的数据结构

什么是集合框架 数据结构,我们知道数据结构就是组织数据的一种方式,比如所链表,就是将数据存储在链表的value域中,next域就是存储下一个节点的地址,通过这样的方式将数据组织起来。 在我们学习中,所知道 的…

接口幂等实现基于注解(适用于分布式系统中支持spEl动态过滤)

在网络卡顿时,容易出现在极短的时间内产生重复请求,或重复支付,一般我们会在数据操作时先通过数据查询是否存在,然后再进行业务逻辑操作的方式来进行避免,但是这种方式并不是原子性,很容易出现第一次请求未进行落表,第二次重复的请求就已经通过了数据库查询,可通过设置唯一索引…

用于开发语音 AI 应用程序的 GPU 加速 SDK

NVIDIA Riva 简介:用于开发语音 AI 应用程序的 GPU 加速 SDK 语音 AI 用于多种应用,包括联络中心的座席助理以增强人类座席的能力、智能虚拟助理 (IVA) 的语音界面以及视频会议中的实时字幕。 为了支持这些功能,语音 AI 技术包括自动语音识别…

基于springboot的社区团购管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

FineReport企业报表工具-JS根据条件显示参数控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 问题描述 在使用参数控件时,有时我们希望部分参数控件在没满足条件时不显示,满足条件后再显示,如下图效果,只有前面的下拉框选择了内容之后,后一层下拉框控…

【C语言】重要函数qsort函数的用法

目录 一、qsort函数的介绍 1、整形数组 2、字符数组 3、字符串 4、结构体 二、qsort函数的使用 一、qsort函数的介绍 qsort函数是一种底层快速排序的函数,它的特点就是可以排序任意类型的数据,比如:整形、字符串、浮点型、以及结构体类型。 …