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
