【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的形式存儲比較保險,不會出亂碼。直接寫字符串總是會出現各種各樣的亂碼。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM