【Python】 用户图形界面GUI wxpython IV 菜单&对话框
更多组件
■ 菜单栏 Menu
菜单是很多GUI必不可少的一部分。要建立菜单,必须先创建菜单栏:
menuBar = MenuBar()
menu = Menu()
item1 = menu.Append(-1,"itemA") #itemA是显示在菜单上的名字
item2 = menu.Append(-1,"itemB")
self.Bind(EVT_MENU,self.processItem1,item1) #注意,不是item对象来Bind而是窗口本身来Bind!而且要有第三个参数指出是哪个item触发事件 menubar.Append(menu,"menuA") #menuA是显示在菜单栏上的名字
self.SetMenuBar(menubar)
效果:

MenuBar类的一些方法:
Append(Menu对象)
Remove(pos) 删除位于pos位置的menu项
GetMenuCount()
Menu类的一些方法:
AppendRadioItem(id,label) 添加一个带单选项的菜单项
AppendCheckItem(id,label) 添加一个带复选框的菜单项
AppendMenu(id,'submenu name',Menu) 添加一个子菜单,第三个菜单是子菜单的Menu类对象
AppendSeparator() 添加一条分隔线
*有时候菜单栏先于那些主体组件设置的话会引起布局混乱,我也不知道为什么,总之碰到这种情况的话就把self.SetMenuBar(...)的部分放到所有主体组件后面吧
■ 对话框 Dialog
对话框是个可以不依赖某个Frame类存在的类(或者说其本身就是个已经包装好的Frame类)。默认对话框中并没可显示的组件,需要自己添加。另外Dialog类有些特别的方法和子类可以让程序员简化代码。接下来就主要介绍一些预设对话框,by which可以大大简化程序设计
● 对话框Dialog
Dialog类是所有对话框的一个基本类,自带一个面板,可以自己往上面添加文字,按钮等组件。比如下面这样一个实例的话:
class MyDialog(wx.Dialog):
def __init__(self,parent,text):
wx.Dialog.__init__(self,parent,-1,u"确认信息",size=(250,140))
sizer = wx.GridSizer(rows=2,cols=1)
label = wx.StaticText(self,-1,text)
label.SetFont(wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD))
okbtn = wx.Button(self,wx.ID_OK,u"确认")
okbtn.SetDefault()
clbtn = wx.Button(self,wx.ID_CANCEL,u"取消")
btnSizer = wx.GridSizer(rows=1,cols=2)
btnSizer.Add(okbtn,flag=wx.ALIGN_CENTER)
btnSizer.Add(clbtn,flag=wx.ALIGN_CENTER)
sizer.Add(label,flag=wx.ALIGN_CENTER)
sizer.Add(btnSizer,flag=wx.EXPAND)
self.SetSizer(sizer)
当我调用这个对话框类创建一个对话框之后,点击对话框的确定就返回ID_OK,取消则返回ID_CANCEL,可以拿来做判断了:
myDialog = MyDialog(self,u"确认吗?") #写这个类的时候特意加了一个parent参数,来明确是从哪个窗口打开的对话框
result = myDialog.ShowModal()
if result == wx.ID_OK:
pass
elif result == wx.ID_CANCEL:
pass
需要注意:不要忘了调用ShowModal()!!!!对话框和MessageBox不一样,不会自动显示!!!
● 提示文本框 MessageBox
MessageBox('text','title')两个参数都是字符串,第一个是提示框中显示的文字,第二个是提示框的title写什么。调用这个就会自动生成一个提示信息的对话框,点击框中的OK按钮对话框就自动Destroy()(有点像js里的alert)。
● 文本输入对话框
调用方法
GetTextFromUser('text','title'[,'defaultvalue']) 对话框中有一个文本输入框,供用户输入一段文本。输入的文本直接返回,所以可以text = GetTextFromUser(...)。如果按取消则会返回空文本。可以设置defaultvalue来确定对话框在打开时的默认值
GetPasswordFromUser('text','title'[,'defaultvalue']) 和上面类似,只是在输入的时候显示的是小黑点。然后返回的仍然是密码的明文
GetNumberFromUser('label','hint','title',defaultvalue,smallest,biggest) 获取用户输入数字的界面。参数比较多,实例如下:
smallest和biggest分别规定了数字的下限和上限
● 列表项对话框
GetSingleChoice("text","title",list) list是个字符串组成的列表,返回选取字符串的值
● 文件对话框
FileDialog(parent,"title","defaultpath","defaultfile",style) 生成一个选择文件的对话框。defaultpath决定了打开时对话框在哪个目录里,可以设置成os.getcwd()。defaultfile指在文件对话框下面的文本框里显示的文件名的默认值。style可以设置一些这个文件对话框的样式,比如是打开某文件(FD_OPEN),保存某文件(FD_SAVE),打开文件且要求其一定存在(FD_OPEN+FD_FILE_MUST_EXIST),保存文件并提示是否覆盖(FD_SAVE+FD_OVERWRITE_PROMPT)等等。
FileDialog只能用于选择文件,如果要选择目录的话就要用DirDialog(...)
需要注意的是,FileDialog和DirDialog不像之前提到的那些对话框一样会自动显示。显示这些文件对话框需要手动控制:
代码:
fdlg = FileDialog(None,"File",os.getcwd(),"testfile",style=FD_OPEN)
fdlg.ShowModal() #不是Show而是ShowModal
print fdlg.GetPath() #获取被选择的文件的路径,可以对之进行处理
界面:

■ 零碎积累
● wx的源码中的中文全部都以unicode的形式存储比较保险,不会出乱码。直接写字符串总是会出现各种各样的乱码。。
【Python】 用户图形界面GUI wxpython IV 菜单&对话框的更多相关文章
- 【Python】 用户图形界面GUI wxpython II 布局和事件
wxpython - 布局和事件 这章主要记录布局器Sizer以及事件的用法. // 目前还需要记录的:Sizer的Add方法加空白,Sizer的Layout,Sizer的Remove如何有效 ■ 布 ...
- 【Python】 用户图形界面GUI wxpython I 基本用法和组件
wxpython - 基本用法和组件 wxpython是python对跨平台GUI库wxWidgets的封装.wxWidgets是由C++写成的. wxpython被包装进了wx模块中,用它设计GUI ...
- 【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 上 ...
- 十. 图形界面(GUI)设计10.菜单
有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...
- python之图形界面GUI开发 Tkinter 2014-4-7
1.导入Tkinter 可以使用以下三种方法(1)from Tkinter import *#导入Tkinter(2)import TkinterTkinter.methodA使用 Tkinter.m ...
- python简单图形界面GUI入门——easygui【转】
原文:https://blog.csdn.net/mingqi1996/article/details/81272621 感觉gui做起来成就感比较高,学完基础语言顺便花一个下午看看GUI设计,现在回 ...
- Java图形界面GUI
Java图形界面GUI 设置窗体JFrame对象 package com.Aha.Best; import javax.swing.ImageIcon; import javax.swing.JFra ...
随机推荐
- 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型
本文部分内容来源于CDA深度学习实战课堂,由唐宇迪老师授课 如果你企图用CPU来训练模型,那么你就疯了- 训练模型中,最耗时的因素是图像大小size,一般227*227用CPU来训练的话,训练1万次可 ...
- 获取NVIDIA显卡的温度
NVIDIA显卡在硬件上有温度传感器,可以感知显卡的运行环境.温度数据的获取,一般是通过调用NVIDIA的SDK的相关函数即可.SDK的下载的网址(https://developer.nvidia.c ...
- 手把手教你在Windows环境下升级R
在Windows环境下,我们可以使用installr包自动将R升级到最新版本.并且可以安装软件.下面主要演示如何在Windows环境下升级R,并将旧版本安装的R包复制到更新版本的R. 1.加载inst ...
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
4 任务与任务状态 VxWorks实时内核Wind提供了基本的多任务环境.对用户而言,宏观上看起来,多个任务同时在执行.而本质而言,在微观上,系统内核中的任务调度器总是在根据特定的调度策略让它们交替运 ...
- stl string 容器的使用
string 是基本的字符串序列容器,对应数据结构中的串,和vector<char>也类似,但功能更多 string 容器的使用 1,string 的构造函数是. string() 2,s ...
- unix时间戳转换成标准时间(c#)
//---unix时间戳转换成标准时间(c#)---// /* string timeStamp = "1144821796"; DateTime dtSt ...
- R语言-动画
使用动画可以使得图形更形象,更能反映数据的变化 1.安装环境gganimate if(!require(devtools)) install.packages("devtools" ...
- 芝麻HTTP:PhantomJS的安装
PhantomJS是一个无界面的.可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作.CSS选择器.JSON.Canvas以及SVG. Selenium支持PhantomJS,这 ...
- IOLI-crackme0x06-0x09 writeup
前几天写了使用Radare2并用3中方法来解决crackme0x00, 然后紧接着第二天 就写了另外5个writeup, 如果认真看会发现那几个crackme的分析也是一开始 走了很多弯路, 但玩多了 ...
- 洛谷2709 小B的询问(莫队)
题面 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R] ...