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

  • 相关阅读:
    C语言学习笔记:14_内部函数和外部函数
    HDU 1247 Hat’s Words (字典树 && map)
    混合云技术难题
    psql
    postgresql基本语句
    postgresql C/C++ API 接口
    REST API初识及设计
    postGreSQL数据库部署及简单使用
    IO-APIC
    OpenstackHigh-level-service
  • 原文地址:https://www.cnblogs.com/franknihao/p/6626604.html
Copyright © 2020-2023  润新知