wxpython菜单的位置_【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类是所有对话框的一个基本类,自带一个面板,可以自己往上面添加文字,按钮等组件。比如下面这样一个实例的话:

classMyDialog(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的形式存储比较保险,不会出乱码。直接写字符串总是会出现各种各样的乱码。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值