pythonwx功能_python中wx模块的具体使用方法

wx包中的方法都是以大写字母开头的,而这和Python的习惯是相反的。

本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。这里介绍wxPython :

根据自己的操作系统下载相应版本。

安装:

安装过程非常简单,以win7系统为例,点击下载的exe 文件,保持安装目录与本机的python目录一致就OK了。

创建并显示一个框架import wx # 需要导入wx模块

app = wx.App()

win = wx.Frame(None)

win.Show()

app.MainLoop()

运行:

v2-7fa8e025543e86c41f65272f087690fa_720w.png

我们来创建一个文本编辑器,功能要求如下:

* 它可以打开给定文件名的文本文件;

* 它可以编辑文件文件

* 它可以保存文本文件

* 它可以正常退出程序

一,设置按钮位置import wx

app = wx.App()

win = wx.Frame(None,title = "编辑器", size=(410,335))

win.Show()

loadButton = wx.Button(win, label = '打开',pos = (225,5),size = (80,25))

saveButton = wx.Button(win, label = '保存',pos = (315,5),size = (80,25))

filename = wx.TextCtrl(win, pos = (5,5),size = (210,25))

contents = wx.TextCtrl(win, pos = (5,35),size = (390,260), style = wx.TE_MULTILINE | wx.HSCROLL)

app.MainLoop()

运行:

v2-6c7c998725d94c9d58c022ccfdc8526f_720w.png

这里可能需要注意的是,控件(按钮,输入框)的位置和尺寸,位置和尺寸都包括一对数值:位置包括x 和y坐标,而尺寸包括宽和高。

代码比较简单,按钮控件(打开、保存)就不解释了。需要注意的是文本控件,默认的文本框(text field)就是一行可编译的文本,没有滚动条,为了创建文本区(text area)只要使用style参数调整风格,style 参数的值实际上是个整数,但不用直接指定,可以使用按位或运算符OR联合了wx.TE_MULTILINE来获取多行文件区,以及 wx.HSCROLL来获取水平滚动条。

二、智能的布局

尽管明确每个组件的几何位置很容易理解,但调整起来比较乏味。import wx

app = wx.App()

win = wx.Frame(None,title = "编辑器", size=(410,335))

bkg = wx.Panel(win)

loadButton = wx.Button(bkg, label = '打开')

saveButton = wx.Button(bkg, label = '保存')

filename = wx.TextCtrl(bkg)

contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE | wx.HSCROLL)

hbox = wx.BoxSizer()

hbox.Add(filename, proportion =1, flag = wx.EXPAND)

hbox.Add(loadButton, proportion =0,flag = wx.LEFT, border = 5)

hbox.Add(saveButton, proportion =0,flag = wx.LEFT, border = 5)

vbox = wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion = 0,flag = wx.EXPAND | wx.ALL, border = 5)

vbox.Add(contents, proportion = 1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border = 5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

运行这段代码,窗口会和上面的相同,但是使用了相对坐标而不是绝对坐标。

wx.BoxSizer的构造函数带有一个决定它是水平还是垂直的参数,默认为水平。

add方法有几个参数,proportion参数根据在窗口改变大小时所分配的空间设置比例。flag参数类似于构造函数中的style参数,可

二、添加事件处理

上面的界面做好了,但是我们点击按钮不起任何的作用。

在GUI术语中,用户执行的动作(比如 点击按钮)叫做事件。我们需要让程序注意这些事件并且作出反应。

假设写了一个负责打开文件的函数,并将其命令为load ,然后就可以像下面这样将函数作为loadButton的事件处理函数:loadButton.Bind(wx.EVT_BUTTON, load)

让我们来完成剩下的工作,现在需要的就是两个事件处理函数:load(打开)和save(保存)。当事件被调用时,它会收到一个事件对象作为它唯一的参数,其中包括发生了什么事情的信息,但是在这里可以忽略这方法的事情,因为程序只关心点击时发生的事情。def load(event):

file = open(filename.GetValue())

contents.SetValue(file.read())

file.close()

上节刚刚学过文件的打开/读取,文件名使用filename对象GetValue方法获取。为了将文本引入文本区,只要使用contents.SetValue即可。

save函数和load类似,除了它需要写入(‘w'),以及用于文件处理部分的write方法,GetValue用于从文本区获得信息。def save(event):

file = open(filename.GetValue(),'w')

file.write(contents.GetValue())

file.close()

万事具备,将它们最终组装,内容如下:import wx

def load(event):

file = open(filename.GetValue())

contents.SetValue(file.read())

file.close()

def save(event):

file = open(filename.GetValue(),'w')

file.write(contents.GetValue())

file.close()

app = wx.App()

win = wx.Frame(None,title = "编辑器", size=(410,335))

bkg = wx.Panel(win)

loadButton = wx.Button(bkg, label = '打开')

loadButton.Bind(wx.EVT_BUTTON,load)

saveButton = wx.Button(bkg, label = '保存')

saveButton.Bind(wx.EVT_BUTTON,save)

filename = wx.TextCtrl(bkg)

contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE | wx.HSCROLL)

hbox = wx.BoxSizer()

hbox.Add(filename, proportion =1, flag = wx.EXPAND)

hbox.Add(loadButton, proportion =0,flag = wx.LEFT, border = 5)

hbox.Add(saveButton, proportion =0,flag = wx.LEFT, border = 5)

vbox = wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion = 0,flag = wx.EXPAND | wx.ALL, border = 5)

vbox.Add(contents, proportion = 1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border = 5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

运行:

v2-d1620eb89733371617f18394f143e2ea_720w.png

下面玩转这个小程序步骤:

1、文本框输入aaa.txt

2、文本区输入hello.world!

3、点击保存(不会有保存成功的提示,但它已经成功了)

4、关闭编辑器(只为了好玩),重新运行打开。

5、文件框输入aaa.txt ,点击“打开”按钮,上次编辑的内容(hello.world)在文本区出现了。

到此这篇关于python中wx模块的具体使用方法的文章就介绍到这了,更多相关python wx模块内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

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

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

相关文章

uml 类图_UML-类图

概念Class diagram is UML structure diagram which shows structure of the designed system at the level of classes and interfaces, shows their features, constraints and relationships - associations, generalizations, dependencies, etc.类图是用于描述类、接口这一…

python读取文件中的内容_python 读取文件夹中的文件内容

看thinking in java的时候发现有个题的答案不确定结果, 于是下载答案看下,结果是这个样子的,这样要怎么才能找到相对应的答案?于是我就着手写了一个快速遍历的脚本(我这里只是单纯的找了出来, 没有把找到的文件单独拿出…

binlog数据库不写入binlog_京东智联云MySQL数据库如何保障数据的可靠性?

MySQL作为当前最流行的关系型数据库,在各个行业的系统中扮演着最重要的角色。随着大家对数据价值认可的逐步加深,数据的可靠性是最常被问到的一个问题。MySQL是如何保证数据可靠性的?京东智联云RDS-MySQL又做了哪些优化和新特性来保证用户数据…

js和python哪个好_Python与Node.JS:哪一个比较适合您的项目?

在进行新项目时选择正确的编程语言可能是程序员经常做出的比较艰巨的决定之一。这个挑战背后的原因是,每个新项目都会遇到一个独特的问题,并且在编程世界中,没有任何行业的大师。 不同的编程语言都有其长处和短处,这使其适用于某些…

equation在c语言中是什么意思,MathType出现此对象创建于Equation中的问题怎么办

使用MathType出错的窗口:MathType程序停止工作提醒窗口:解决方法如下:1.打开Word文件,在Word菜单中选择“工具”——“模板和加载项”,将会跳出一个模板和加载项的对话框。在Word菜单中选择“工具”——“模板和加载项…

windows多用户 文件夹不共享_手把手教你如何使用Tekla多用户

Tekla有多用户模式,对于大模型需要多人合作很有用,可以多人同时建模互不干扰,下面简单说下多用户建立过程。 首先需要参与模型的计算机处于同一局域网内,一般来说公司都有局域网,或者办公室内就是一个小局域网&#xf…

hystrix原理_面试必问的SpringCloud实现原理图

引言面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展。以下是《Java深入微服务原理改造房产销售平台…

android 图片跑马灯动画,ImageView 图片循环跑马灯的效果

不解释了 直接上代码了main.xml布局文件,记住必须用RelativeLayout将ImageView重叠android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent" android:id"id/rl">android:…

c++ string类的常用方法_【常用类方法】Object

Object类的知识点总结概述:1. Object类是所有其他类的父类2. Object类只有一个构造方法,这也是为什么所有子类在调用构造方法时都会默认先调用父类的无参构造方法3. Object类没有成员变量方法:1. public int hashCode()2. public final Class…

python注释以符号什么开始_python注释以什么符号开始

python注释以什么符号开始,注释,中文,代码,批量,符号 python注释以什么符号开始 易采站长站,站长之家为您整理了python注释以什么符号开始的相关内容。 python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也…

linux 别名,Linux中的别名就这么简单,如何使用和创建永久别名?

原标题:Linux中的别名就这么简单,如何使用和创建永久别名?输入文本和记命令是Linux命令行爱好者的缺点之一。如果你需要输入并记住同样长的命令,这可能会降低终端的工作效率。如果您可以用自己的短名称替换长命令,或者…

华为手机如何固定横屏_华为手机如何录屏?原来方法这么简单,手把手教你学会...

很多人都不知道,华为手机到底如何录屏,下面给大家分享4种方法,非常简单,手把手教你学会。一、通知栏录屏从手机顶端往下滑动打开通知栏,这个面板上有很多快捷功能,其中就有【屏幕录制】功能,点击…

程序发出的广播其他程序收不到_RabbitMQ 如何实现对同一个应用的多个节点进行广播...

1.背景了解过RabbitMQ的Fanout模式,应该知道它原本的Fanout模式就是用来做广播的。但是它的广播有一点区别,来回顾下它的含义:Fanout类型没有路由键的概念,只要队列绑定到了改exchange上面,就会接收到所有的消息。使用…

api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景

Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现,目前在分布式系统、大数据领域中使用非常广泛。本文将介绍 Zookeeper 集群架构、数据模型、监听机制,以及Zookeeper典型的应用场景等。1. Zookeeper 集群角…

android多个水波球,android球形水波百分比控件代码

本文主要介绍的是一个球形水波的百分比控件,市面上有各种形形色色的百分比控件,我一直觉得水波是最炫的,UI给了我这个机会,然而网上搜了一大堆,不是太复杂,代码太多(反正我是调不出效果来),就是…

c++ 二维数组_【技术篇】C指针与二维数组深度辨析

一、源代码/*第01行*/ CLion 2019.3.4 x64中编写的源代码截图二、深度辨析CLion 2019.3.4 x64中编译的结果截图zippo[4][2]是一个四行二列的int型二维数组①不论一维数组还是二维数组,数组名就是指向数组首个元素的指针,也即数组名就是数组首个元素的…

shiro启动之后页面访问不了_java:shiro入门——4

【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候,会被【7.3】角色过滤使用“admin”用户登录,密码:123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后:此…

oreo另一个意思_记一次有意思的统计(部分大宗商品价格指数相关性统计)

最近闲来无事,对部分大宗商品近十年的价格涨幅做了个统计,发现有些有意思的现象:大多资产价格走势如果放到一个足够长得时间维度里,那其实整体走势是比较一致的;有些资产价格走势高度相关,但是在某个时间段…

android左右耳机声音大小不一样,AirPods左右两边声音大小不同怎么办 单侧无声和两侧音量不同解决方法...

AirPods连接 iPhone 后如果出现了左右两边声音大小不一样,或者单侧无声的问题,可能是软件导致的暂时性故障,也有可能是硬件问题。当耳机音量出现异常时,可以通过以下几种方式尝试恢复。单侧无声和两侧音量不同解决方法&#xff1a…

laravel 任务队列_Laravel5.5之事件监听、任务调度、队列

流程:1.1 创建eventphp artisan make:event UserLoginLoginController.php/*** The user has been authenticated.** param IlluminateHttpRequest $request* param mixed $user* return mixed*/protected function authenticated(Request $request, $user){eve…