[Python] wxPython 狀態欄組件、消息對話框組件 學習總結(原創)


 1、狀態欄組件

  1、基本介紹

      上圖:

      

      紅框框內的就是狀態欄。

      他可以分成若干個區塊,比如上者分為了兩個區塊,並且比例是固定的,創建時可以指定

      每個區塊都能夠顯示 信息,一般通過 綁定事件 實時更新 各個區塊的內容

      因為狀態欄本身 組件,所以除了能夠自己顯示文本消息,還能夠添加 其他組件,例如 進度條(常用)、按鈕、編輯框、等。

      目前學習並用到是這些,還有未提及的希望能夠在評論中告知,感謝。

  2、基本創建過程 (有兩種)

      1、先創建一個 狀態欄對象 然后添加到 窗口框架 中

        基本過程代碼如下:

        

        首先創建一個 狀態欄對象(id = -1 表示 id 由系統自動隨機生成),然后設置了它的 :

        分區數 : 好像可以設置很多。必須大於 0 ,否則報錯

        分塊比例:參數是一個 元組, 分塊數是幾個,元組內元素就是幾個。

             [-n, -m],負數表示時,表示區塊為 n:m

             [n, m] , 整數表示時,區塊大小是個定值,第0個區塊長度為 n,第1個為 m,不會隨着 窗口框體的變化而變化。

        分塊內顯示的內容:一般到實事件中進行 設置, 其中兩個參數,第一個為 內容,第二個為 區塊索引(從0開始)

        最后把它添加到了 窗口框體中

      2、從 窗口框體 中實例化一個 狀態欄對象並進行操作

        

        通過 接受 窗口框體.CreateStatusBar() 方法返回的 狀態欄 對象來 控制 狀態欄

        控制設置 過程一致

  3、其他

      1、當不需要顯示 狀態欄 時 可以調用 狀態欄對象的 .Show() 方法進行設置

        

        參數為 :

        True 時為 顯示,

        False 時為 隱藏。

        一般比較少用到,但還是有必要知道的。

      2、添加一個 進度條 到狀態欄組件中

        方法很簡單:

        申明一個 父件為 此狀態欄的進度條。

        然后根據 父件的相關大小參數,調整設置 自己的 相當位置與大小。

        一般 窗口綁定 窗口大小變化事件 從而實現實時 進度條與父件 大小相映襯。(以下代碼沒綁定事件)

 

 1 # coding: utf-8
 2 # author: Twobox
 3 
 4 import wx
 5 
 6 class MyWin(wx.Frame):
 7     def __init__(self, parent, title):
 8         super(MyWin, self).__init__(parent = parent, title = title)
 9         self.initUI()
10         self.Show()
11 
12     def initUI(self):
13         statusBar = self.CreateStatusBar(id = -1)
14         statusBar.SetFieldsCount(2)
15 
16         print(statusBar.GetSize())
17         gauge = wx.Gauge(statusBar, range = 100, pos = (2, 2), size = (statusBar.GetSize()[0]/2-13, 22), style=wx.GA_HORIZONTAL)
18         gauge.SetValue(50) # 設置當前進度 一般放到事件中 實時更新
19 
20 def main():
21     app = wx.App()
22     MyWin(None, "Windows - test")
23     app.MainLoop()
24 
25 if __name__ == '__main__':
26     main()

 

  4、狀態欄組件 學習代碼

 

 1 #coding:utf-8
 2 #author:Twobox
 3 
 4 import wx
 5 
 6 class Mywin(wx.Frame):
 7     """2種方法"""
 8     def __init__(self, parent, title):
 9         super(Mywin, self).__init__(parent = parent, title = title)
10         self.initUI_2()
11         self.Show()
12 
13     def initUI_1(self):
14         """通過創建一個StatusBar對象,再將再添加到當前窗口。"""
15         self.statusBar1 = wx.StatusBar(self, -1)                #實例化一個 狀態欄 對象
16         self.statusBar1.SetFieldsCount(2)                       #設置 狀態欄分塊數
17         self.statusBar1.SetStatusWidths([-4,-1])                #設置 狀態欄分塊的比例
18         self.statusBar1.SetStatusText("  第 1 行 , 第 1 列", 1)  #設置 狀態欄內的內容,索引從 0 開始
19         self.SetStatusBar(self.statusBar1)                      #將 狀態欄對象 添加到 窗口框體中
20 
21     def initUI_2(self):
22         """StatusBar2當做是當前窗口創建出來的對象后直接使用。"""
23         self.statusBar2 = self.CreateStatusBar()                #通過當前窗口框體創建出來一個 狀態欄 對象
24         self.statusBar2.SetFieldsCount(2)                       #與上相同
25         self.statusBar2.SetStatusWidths([-4,-1])
26         self.statusBar2.SetStatusText("  第 1 行 , 第 1 列",1)
27         self.statusBar2.Show(True)                             #可設置為隱藏(即不可見)
28 
29 def main():
30     app = wx.App()
31     Mywin(None, "StatusBar - Test")
32     app.MainLoop()
33 
34 if __name__ == '__main__':
35     main()

 

2、消息對話框組件

  1、基本介紹

      上圖:

      

      這種信息框大家幾乎天天都接觸,比如關閉個軟件 它會彈個框框問你是否真的關閉,或者安裝完一個軟件的時候詢問你是否立即運行,等等等等。

      消息框的一般構成:

      標題:X 鍵左邊的那個 “Hello World!”

      消息圖標:上圖是個感嘆號

      消息內容:純白色框框內的文字嘍~

        可以是多行,O.O 如果讓一萬個換行符上去 應該也是可以的。

      若干個按鈕:上圖是一個,一共有四種:

        YES 、NO 、CANCEL 、OK 。

        單擊后會返回以下相應的4條表示,所以可以用來判斷按了哪個按鈕。

        wx.ID_YES, wx.ID_NO, wx.ID_CANCEL, wx.ID_OK。

  2、一般使用過程

      以下 事件綁定在一個按鈕上,單擊后觸發事件函數:

      

      首先創建一個 消息框對象:

        message:消息框的內容

        caotion:消息框的標題

        style:指定按鈕類型 與 消息框圖標樣式 (style 可接受的參數列表 請向下看)

      一個判斷語句:

        該判斷語句 先執行 信息框 的 .ShowModal() 方法 (即彈出這個信息框)。

        當我們單機相關按鈕后,該方法返回一個標識 。

      最后根據接受到的不同的表示完成 我們需要的不同的操作

  3、其他(style 可接受參數說明)

        

        其中 wx.ICON_*** 的為 信息框的圖標樣式。

        其他的為,信息框的按鈕樣式。

  4、信息框學習代碼 (有點意思)

 

 1 # coding: utf-8
 2 # author: Twobox
 3 
 4 import wx
 5 
 6 class MyWin(wx.Frame):
 7     def __init__(self, parent, title):
 8         super(MyWin, self).__init__(parent=parent, title=title)
 9         self.initUI()
10 
11     def initUI(self):
12         panel = wx.Panel(self)
13         vbox = wx.BoxSizer(wx.VERTICAL)
14 
15         # 添加 兩個 Button
16         self.bt1 = wx.Button(parent=panel, label=u"問好")
17         self.bt2 = wx.Button(parent=panel, label=u"關閉")
18         self.bt1.Bind(wx.EVT_BUTTON, self.eventButtonOne)
19         self.bt2.Bind(wx.EVT_BUTTON, self.eventButtonTwo)
20 
21         vbox.Add(self.bt1, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
22         vbox.Add(self.bt2, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
23 
24         panel.SetSizer(vbox)
25 
26         self.Center()
27         self.Show()
28 
29     def eventButtonOne(self, event):
30         msgDialog = wx.MessageDialog(parent=None, message = u"你今天過的好嗎?(只能說好)", caption = u"Hello World!", style = wx.OK)
31         if msgDialog.ShowModal() == wx.ID_OK:
32             self.bt1.SetLabel(u"回答:今天很好")
33         else:
34             self.bt1.SetLabel(u"回答:今天不很好")
35 
36     def eventButtonTwo(self, event):
37         msgDialog = wx.MessageDialog(parent = None, message = u"確認關閉該窗口?", caption = u"Hello World!", style = wx.YES_NO|wx.ICON_AUTH_NEEDED)
38         if msgDialog.ShowModal() == wx.ID_YES:
39             self.Close()
40         self.bt2.SetLabel(u"選項:不關閉")
41 
42 def main():
43     app = wx.App()
44     MyWin(None, "MessageDialog - Test")
45     app.MainLoop()
46 
47 if __name__ == '__main__':
48     main()

 

3、感想

    O.O 好累 好累,如果再慢一點搞完 怕是中午飯都要錯過了。。先強烈譴責一下 學校食堂飯菜一成不變。。舒暢多了。。

    這兩種組件的運用 都不難,此文章的主要作用還是 歸納了一下的基本用法,方便以后再看看。

    O.O wxpython 在網上系統性的資料少了點,零零散散,找起來。。哎。。。

4、后言

  信息框參考的隨筆:http://www.cnblogs.com/dyx1024/archive/2012/07/07/2580380.html

  轉載請注明出處 (●'◡'●):http://www.cnblogs.com/Twobox/

  2017-08-23 12:35:23


免責聲明!

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



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