python基础课程_2学习笔记3:图形用户界面

图形用户界面

丰富的平台

写作Python GUI程序前,须要决定使用哪个GUI平台。

简单来说,平台是图形组件的一个特定集合。能够通过叫做GUI工具包的给定Python模块进行訪问。

工具包

描写叙述

Tkinter

使用Tk平台。非常easy得到。

半标准。

wxpython

基于wxWindows

跨平台越来越流行。

PythonWin

仅仅能在Windows上使用。

使用了本机的Windows GUI功能。

JavaSwing

仅仅能用于Jython。使用本机的Java GUI

PyGTK

使用GTK平台,在linux上非常流行。

PyQt

使用Qt平台。跨平台。

 

每一个工具包都有利弊,但非常大程度上取决于个人喜好。

下面以wxPython为例。

下载和安装wxPython

下载地址:

http://wxpython.org/download.php

注意:假设python64位的,则必须选用64位的wxPython,否则即便是64位的操作系统也应该选用32位的wxPython

 

建议下载wxPython的演示版本号,并研究它。

创建演示样例GUI应用程序

開始

 

開始须要导入wx模块:

import wx

 

编写wxPython程序的方法非常多,但不可避免的事情是创建应用程序对象。主要的应用程序类是ex.App,它负责幕后全部的初始化。

最简单的wxPython程序应该像以下这样:

import wx

app=wx.App()

app.MainLoop()

由于没有不论什么用户能够交互的窗体,程序会立马退出。

 

wx包中的方法都是以大写字母开头的,这和python的习惯是相反的。这样做的原因是这些方法名和基础的c++wxWidgets中的方法名都是相应的。虽然没有正式的规则反对方法或者函数名以大写字母开头,但规范的做法是为类保留这种名字。

 

窗体和组件

窗体(Window)也称为框架(Frame),它仅仅是wx.Frame类的实例。

wx框架中的部件都是由它们的父部件作为构造函数的第一个參数创建的。假设正在创建一个单独的窗体,就不须要考虑父部件。使用None就可以。并且在调用app.MainLoop()前须要调用窗体的Show方法——否则它会一直隐藏。

 

import wx

 

app=wx.App()

win=wx.Frame(None)

win.Show()

app.MainLoop()

 

运行结果:

 

 

添加button:

import wx

 

app=wx.App()

win=wx.Frame(None)

btn=wx.Button(win)

win.Show()

app.MainLoop()

运行结果:

 

 

标签、标题和位置

能够在创建部件的时候使用构造函数的label參数设定标签。用title设定标题。

import wx

 

app=wx.App()

win=wx.Frame(None,title="Simple Editor")

 

loadButton=wx.Button(win,label='Open')

saveButton=wx.Button(win,label='Save')

 

win.Show()

app.MainLoop()

 

运行结果:

 

 

应该有两个button,实际仅仅有一个是由于还有一个被隐藏掉了。

 

 

调节button位置:

import wx

 

app=wx.App()

win=wx.Frame(None,title="Simple Editor",size=(410,335))

win.Show()

 

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

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

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

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

 

app.MainLoop()

 

运行结果:

 

 

更智能的布局

在调整窗体大小时。应该能保证窗体中的组件也会随之调整大小和位置。

 

wx内进行布局的最简单方法是使用尺寸器(sizer),最easy使用的工具就是wx.BoxSizer

import wx

 

app=wx.App()

win=wx.Frame(None,title="Simple Editor",size=(410,335))

bkg=wx.Panel(win)

 

loadButton=wx.Button(bkg,label='Open')

saveButton=wx.Button(bkg,label='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()

 

运行结果:

 

拉伸效果

 

事件处理

GUI术语中,用户运行的动作叫做事件(event

让程序注意这些事件并作出反应。能够将函数绑定到所涉及的事件可能发生的组件上达到这个效果。当事件发生时。函数会被调用。利用部件的Bind方法能够将事件处理函数链接到给定的事件上。

完毕了的程序

代码:

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="Simple Editor",size=(410,335))

 

bkg=wx.Panel(win)

 

loadButton=wx.Button(bkg,label='Open')

loadButton.Bind(wx.EVT_BUTTON,load)

 

saveButton=wx.Button(bkg,label='Save')

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()

 

输入地址,点击openbutton,以下显示文件内容。

在以下区域编辑后点击savebutton关闭程序。

运行1步骤可看到刚才编辑的效果。

 

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/hrhguanli/p/4639428.html

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

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

相关文章

vim编辑器之按键说明

viim编辑器文本:纯文本,ASCII test;文本编辑种类:行编辑器:sed全屏编辑器:nano,vi其他编辑器:gedit 一个简单的图形编辑器gvim 一个vim编辑器的图形版本 一.打开文件几种方法命令格式:vim [options] [files]常用选项:#:打开文件后,直接让光标处于第#行的行首/PATTERN:打开…

idea ssm打war包_IDEA下从零开始搭建SpringBoot工程

SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之:如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友…

c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

遇到的问题:后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上。例:[1,2,3,4,5,6,7,8,9,10] > [[1,2,3], [4,5,6], [7,8…

nano使用说明

Main nano help text The nano editor is designed to emulate 仿真、模拟 the functionality and ease-of-use of the UW Pico text editor. There are four main sections of the editor. The top line shows the program version, the current filename being edited, and w…

dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]

数理统计:数理统计是以概率论为基础,研究社会和自然界中大量随机现象数量变化基本规律的一种方法。分为:描述统计(描述统计的任务是搜集资料,进行整理、分组,编制次数分配表,绘制次数分配曲线,计…

c语言高级语言期中测试答案,上海理工大学C语言2011期中试题和答案

C语言2010/2011学年 第二学期 期中测试高级语言程序设计(C)试卷 A □BA1. 输入一行字符&#xff0c;统计其中的英文字母个数。#include void main(){ char ch;int n0;printf(“Input a string:\n”);while(1){ chgetchar();if (ch \n ) break;if (ch> a && ch< z…

前端基础进阶(十):面向对象实战之封装拖拽对象

https://segmentfault.com/a/1190000012646488 https://yangbo5207.github.io/wutongluo/ 说明&#xff1a;此处只是记录阅读前端基础进阶的理解和总结&#xff0c;如有需要请阅读上面的链接 1.如何让元素动起来 要让元素动起来就要修改元素的top、left 、translate 属性。因为…

iOS - LocalCache 本地数据缓存

1、自定义方式本地数据缓存 1.1 自定义缓存 1 沙盒路径下的 Library/Caches 用来存放缓存文件&#xff0c;保存从网络下载的请求数据&#xff0c;后续仍然需要继续使用的文件&#xff0c;例如网络下载的离线数据&#xff0c;图片&#xff0c;视频文件等。该目录中的文件系统不会…

如何构建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中将构建一个小示例&#xff0c;用于演示在ASP.NET MVC4项目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步骤&#xff1a; 1&#xff0c;添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如…

echarts 有引导线和内部文字_点、线、面构图的异同以及相互转化

点、线、面构图既有相似性&#xff0c;又有差异性。相似的是都有对齐、强调、群组、重复、突出层次的作用&#xff0c;不同的是点的特点是聚焦、线的特点是运动和方向性&#xff0c;面的特性是体量感、稳定性。点的情感最弱&#xff0c;线、面的情感要比点丰富。一、点、线、面…

c语言上机报告之水仙花数,C语言上机报告之水仙花数..doc

C语言上机报告之水仙花数.C语言程序设计上机报告课题名称&#xff1a;水仙花数的算法院 (系)&#xff1a;工程学院专业班 级&#xff1a; 052126学生姓名&#xff1a; 喻培学 号&#xff1a; 20121004040指导教师&#xff1a; 熊慕舟2013年11月24日C语言上机报告之水仙花数上机…

《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

Web的套接字函数库&#xff1a;urllib2 一开始以urllib2.py命名脚本&#xff0c;在Sublime Text中运行会出错&#xff0c;纠错后发现是重名了&#xff0c;改过来就好&#xff1a; #!/usr/bin/python #codingutf-8 import urllib2url "http://www.baidu.com"headers …

vCenter Converter Standalone使用文档

文档目的能够使用vCenter Converter Standalone 将物理机操作系统迁移到虚拟机操作系统基础知识vCenter Converter Standalone 能将物理机上的操作系统、VMware虚拟机上的操作系统或者Hype-V 上的虚拟机操作系统迁移到VMware上。系统环境操作系统&#xff1a;Windows Server 20…

1093芯片做正弦波逆变器_正弦波逆变器中的SPWM调制(钟任生)

欢迎加入技术交流QQ群(2000人)&#xff1a;电力电子技术与新能源 905723370高可靠新能源行业顶尖自媒体在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验&#xff0c;欢迎关注我们&#xff0c;搜索微信公众号&#xff1a;电力电子技术…

android 手机短信恢复,安卓手机短信删除了怎么恢复?简单恢复的方法

原标题&#xff1a;安卓手机短信删除了怎么恢复&#xff1f;简单恢复的方法安卓手机短信删除了怎么恢复&#xff1f;手机短信是生活中不经常使用到&#xff0c;但是依然是十分重要的存在&#xff0c;因为我们现在比较喜欢用社交软件与别人进行交流&#xff0c;但是在一些相对重…

Oracle-查看oracle是否有表被锁

问题现象&#xff1a; 查看oracle是否有表被锁 解决方法&#xff1a; select sid,serial#,program,terminal,username,b.object_id,c.object_name from v$session a, v$locked_object b, dba_objects c where a.sid b.session_id and b.object_id c.object_id;转载于:http…

Python循环的一些基本练习

#1:# name input(请输入你的身份)# if name egon:# print(--> 超级管理员)# elif name tom:# print(--> 普通管理员)# elif name jack,rain:# print(--> 业务主管)# elif name 其他:# print(--> 普通用户)#2# today input(今天是星期几&…

bash下个人习惯的一些文件设置

2019独角兽企业重金招聘Python工程师标准>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

一、前言1、本文主要内容将在项目中实际使用到的相关东西整理记录一波&#xff0c;同时可以方便其他同学在使用到的时候参考一下(自己也备忘)&#xff0c;有不对的地方&#xff0c;欢迎指出~~Docker部署SpringBoot 项目通用Dockerfile文件、脚本Jenkins新建任务图文详解3、本文…

android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

在开发android应用程序时&#xff0c;有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应。譬如编写一个广播接收器&#xff0c;来提示用户有短信收到或者处理短信&#xff0c;就需要向该手机发送短信来进行测试。这里介绍一种简单的向android模拟器打电话发短…