[Python] wxPython 狀態列組件、訊息對話方塊組件 學習總結(原創),pythonwxpython
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 # 添加 兩個 Button16 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