【Python】 用户图形界面GUI wxpython I 基本用法和组件
wxpython - 基本用法和组件
wxpython是python对跨平台GUI库wxWidgets的封装。wxWidgets是由C++写成的。
wxpython被包装进了wx模块中,用它设计GUI很方便,但是必须要做的就是先建立一个应用的对象:
- app = wx.App()
- #与这个app相关的一些控件、框架等的操作,一定要在MainLoop调用前处理完
- app.MainLoop()
为了书写方便,下面所有代码和文本中都默认了是from wx import *了,这样不用每个类前面再加上wx.了。。。
*听说是由于沿用了C++的习惯,所有wx中的方法和函数都是每个单词的首字母大写
■ 一些wx的类方法
wx.DisplaySize() 返回的是屏幕大小,如在窗口创建时指定size是这个的话创建出来的窗口就是最大化的
■ 窗口组件
● 窗口(Frame)类
所有控件都应该放到一个窗口里去展现,这个窗口类就是Frame类。他可以创建一个窗口并且右上角自带最小化、最大化和关闭三个键。
其构造方法是 Frame(self, Window parent, int id=-1, String title=EmptyStrin,Point pos=DefaultPosition, Size size=DefaultSize,long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr)z
各个参数的意思是:
parent 一个父对象,窗口的父对象只能是窗口。父对象的意思是当前对象和其关联起来,当父对象被关闭或者删除的话,当前对象也跟着一起不见了
、 id 指定一个id来在真个wx中标识当前对象。一般来说不用特别指定,可以写默认值-1,意思是让python自动分配一个id给他就好了。当事件发生时,python会根据这个id号来定位发生事件的元素
//以上两个参数在所有控件类的构造方法里都有,且意思也都一样。要记住喔
title 传个字符串,让窗口上面显示这个title
pos 传个元组,表示窗口被创建时出现在屏幕上的位置的坐标。左上角为原点
size 元组,表示窗口被创建时大小,可以
style 窗口的一些界面风格
name 给这个窗口起一个wx内部的名字,可以引用
Frame类有一些类方法:
Show() 显示窗口
Hide() 隐藏窗口 //这两个基本所有控件都有
Iconize() 最小化窗口
Close() 关闭窗口
SetMinSize(tuple) 设置窗口可调节的最小大小
SetMaxSize(tuple) 设置窗口可调节的最大大小
Center() 自动将窗口居屏幕正中显示,这样就可以不用设置构造方法里的pos属性了
一般而言,不会直接调用Frame类来做文章,常见的最佳实践是把需要的控件,事件处理方法等等封装进一个自己定义的Frame类的子类。那么这样一个子类其实抽象的就是一个个性化的窗口,比如:
- class MyFrame(Frame):
- def __init__(self):
- Frame.__init__(self,None,-1,title="test",pos=(100,100),size=(200,200))
- '''
- 布局上的一些个性化添加和操作
- '''
- def someEventHandler(self,event):
- '''
- 定义一些事件处理函数用于给控件Bind
- '''
- pass
- if __name__ == "__main__":
- app = App() #创建应用的对象
- myframe = MyFrame() #创建一个自定义出来的窗口
- myframe.Show() #这两句一定要在MainLoop开始之前就执行
- app.MainLoop()
■ 面板组件 Panel
通常Panel是添加在Frame类上, panel = Panel(Frame,-1)
可以运用Panel来盛放其他组件,以实现对组件的分组管理。更加方便
在panel上,可以用SetBackgroundColour(...)来设置改变背景色,SetForegroundColour(...)设置前景颜色。
需要注意的一点是,Panel是有Size的。与窗口关联的Panel,其大小默认为窗口的大小且具有EXPAND属性,根据窗口大小改变而调整自身大小。而其他的Panel的默认大小是构造方法中的参数指定 or 由最后加进来多少组件决定。所以仅仅把某个没和窗口关联的Panel中的某个组件设置成EXPAND,而Panel本身不设置成EXPAND的话是没有用的,因为窗口大小变化时,Panel本身大小不变。
■ 静态文本 StaticText
构造方法:StaticText(parent,id,label,size,pos,style)
label就是要写的字,可以用SetLabelText(...)设置文字,GetLabelText()来获取文字。SetForegroundColour(...)来设置字的颜色,SetBackgroundColour(...)设置背景的颜色。
style可以设置如wx.ALIGN_CENTER这种,来让文字居中对齐等等
■ 输入框 TextCtrl
TextCtrl的构造方法和StaticText类似,其style可以选
TE_READONLY 设置输入框只读,不可编辑
TE_PASSWORD 输入框中的输入不显示明文而显示黑点
TE_MULTILINE 设置为多行文本输入框
TextCtrl有如下类方法供调用:
AppendText(...),WriteText(...) 向输入框末尾加上一些文本/向输入框开头加上一些文本
Clear() 清空文本框
GetValue(),SetValue(...) 获取/设置文本值
GetRange(from,to) 返回两位置中间的部分的字符串(参数是正整数,指第N个字符。开头首个字符算0,算头不算尾。比如HelloWorld.GetRange(2,4) == "ll")
Remove(from,to) 删除两个位置中间的部分的字符串
SetInsertionPoint(...),GetInsertionPoint() 将光标设置到第N个字符前面(首个字符算0的话)/获得当前光标所在位置
■ 按钮 Button
构造方法也是类似的,label参数指定了在按钮上显示的文本
类方法有:
SetLabel(...),GetLabel() 设置label,获取label
SetDefault() 把按钮设置为其所在窗口的默认按钮,即按下按钮之后和在这个窗口获得焦点时敲回车是一个效果
● 图片按钮
可以用wx.Image来创建一个图片对象,然后用一些方法把这张图整合到button中就可以做成一个图片按钮:
- pic = wx.Image("some_pic_path.png",wx.BITMAP_TYPE_BMP) #建立一个图片对象,图片最好是.png格式的。
- pic.ConvertToBitMap() #将图片格式转换
- btn = wx.BitmapButton(panel,-1,pic) #建立图片按钮
【Python】 用户图形界面GUI wxpython I 基本用法和组件的更多相关文章
- 【Python】 用户图形界面GUI wxpython II 布局和事件
wxpython - 布局和事件 这章主要记录布局器Sizer以及事件的用法. // 目前还需要记录的:Sizer的Add方法加空白,Sizer的Layout,Sizer的Remove如何有效 ■ 布 ...
- 【Python】 用户图形界面GUI wxpython IV 菜单&对话框
更多组件 ■ 菜单栏 Menu 菜单是很多GUI必不可少的一部分.要建立菜单,必须先创建菜单栏: menuBar = MenuBar() menu = Menu() item1 = menu.Appe ...
- 【Python】 用户图形界面GUI wxpython III 更多组件
wxpython - 更多组件 我写到的这些组件可能一来不是很详细,二来不是最全的,想要更好地用这些组件,应该还是去看看教程和别的示例.比较简单的,推荐http://download.csdn.net ...
- AWT提供了Java Applet 和Java Application中可用的用户图形界面 GUI 中的基本组件
AWT提供了Java Applet 和Java Application中可用的用户图形界面 GUI 中的基本组件( component s). 由于Java是一种独立于平台的 程序设计语言 ,但GUI ...
- Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产(使用cef 内核)
Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产 Go 在服务端的优势不容置疑,但是在桌面应用上却没有好的 GUI 支持,本项目是 Go 语言在 Windows 上 ...
- python简单图形界面GUI入门——easygui【转】
原文:https://blog.csdn.net/mingqi1996/article/details/81272621 感觉gui做起来成就感比较高,学完基础语言顺便花一个下午看看GUI设计,现在回 ...
- python之图形界面GUI开发 Tkinter 2014-4-7
1.导入Tkinter 可以使用以下三种方法(1)from Tkinter import *#导入Tkinter(2)import TkinterTkinter.methodA使用 Tkinter.m ...
- 十. 图形界面(GUI)设计1.图形界面设计基础
早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上.现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单.按钮等,用户通过鼠 ...
- Java图形界面GUI
Java图形界面GUI 设置窗体JFrame对象 package com.Aha.Best; import javax.swing.ImageIcon; import javax.swing.JFra ...
随机推荐
- Java Web项目(Extjs)报错四
1.Java Web项目(Extjs)报错四 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...
- AM335x(TQ335x)学习笔记——WM8960声卡驱动移植
经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两 ...
- freemarker获取封装类中对象的属性(六)
freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...
- GAN 转
生成式对抗网络(GAN)是近年来大热的深度学习模型.最近正好有空看了这方面的一些论文,跑了一个GAN的代码,于是写了这篇文章来介绍一下GAN. 本文主要分为三个部分: 介绍原始的GAN的原理 同样非常 ...
- 使用 github 做代码管理,知道这些就够了
只要掌握了下面的常用命令,基本上用使用 github 就没有问题.github 有两种认证方式,一种是通过 ssh 私钥的方式,一种通过 https 的账号名和密码.ssh 方式需要创建本地秘钥并且添 ...
- Flutter 初尝:从 Java 无缝过渡
准备阶段 下载 Flutter SDK 新建 Flutter 文件夹,克隆 Flutter SDK: git clone -b beta https://github.com/flutter/flut ...
- 【转载】Apache Storm 官方文档 —— 基础概念
[转载自https://yq.aliyun.com/articles/87510?t=t1] Storm 系统中包含以下几个基本概念: 拓扑(Topologies) 流(Streams) 数据源(Sp ...
- [BZOJ2049] [SDOI2008] Cave 洞穴勘测 (LCT)
Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...
- node.js连接MySQL操作及注意事项
node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...
- Oracle闪回恢复
Oracle的闪回功能包括 1.闪回数据库(前提 归档模式下 启用闪回数据库) mount 下 alter database archivelog; alter database flashback ...