環境,Win10,python3.7.3,wxPython 4.0.4,wxFormBuilder 3.9
1、准備一個窗體。
點擊wxformbuilder上方的標簽“forms”,並點擊標簽下方的第一個類似窗體的圖標“Frame”
然后,下面就會出現一個窗體。但是現在還不能直接往窗體上添加各種控件。咱們還需要給窗體添加布局器BoxSizer。
2、添加布局器
點擊wxformbuilder上方的標簽“Layout,並點擊標簽下方的第一個圖標“wxBoxSizer”。添加一個只有以列控件布局的布局器。這時,窗體上並沒有什么變化。但是窗口左邊的目錄樹有變化了,窗體下多了一個布局器。
3、放置控件
保持目錄樹如上圖一樣,選中布局器bSizer1。這樣,添加進窗體的控件都屬於並使用這個布局器的方法,單列布局。就是,所有添加上去的控件都是在一列上。
點擊wxformbuilder上方的標簽“Common,順次並點擊標簽下方的地三個圖標“wxStaticText”,第四個圖標“wxTextCtrl”,第一個圖標“wxButton”,第四個圖標“wxTextCtrl”。這樣,窗體設置上就會多出一個文字標簽、兩個文本框和按鈕。
4、修改控件屬性
點擊設計窗體上的控件,或者左邊樹形結構的控件名。在wxformbuilder右邊的編輯欄都會自動變成對應控件的屬性編輯。在此,你可以修改該控件的和窗體的各類屬性。
此處,我們將會修改主窗體的name、title,文本編輯框的name,文字標簽的label,和按鍵的label。以及控件的大小(通過 size 參數修改或工具欄上面的 Expand 工具修改)。
4.1 修改主窗體的name
主窗體的name和控件的name決定了你之后要使用的python代碼時,使用的實體對象的變量名。點擊樹形結構的MyFrame1,並在右邊屬性編輯欄修改窗體的name值為“MyFormMain”。此時,左邊樹形中對應的主窗體也會跟着改變名字。如下圖:
4.2修改控件的屬性
依照同樣的方法,在右邊的編輯框修改對應控件的屬性。
文本編輯框wxTextCtrl的name屬性修改為“text_One”和“text_Two”,文字標簽wxStaticText的label屬性修改為“wxFormBuilder 初學筆記”,和按鍵wxButton的label屬性修改為“求平方”,按鍵wxButton的name屬性修改為“button_main”。
修改完只有應該如下圖所示:
5、 添加控件的觸發事情函數
當按鈕被按下時,咱們應該觸發一個函數,將文本框里的內容清空。所以,應該給按鈕控件添加一個觸發按下之后應該使用的處理函數。
點擊選中按鈕控件button_main,在右邊的屬性編輯框,點擊上面的另外一個標簽“Events”。添加一個給“OnButtonClick”的處理函數名:squareFunction。如下圖:
6、測試窗體內容。
窗體設計基本完事了,咱們現在稍微測試一個窗體的樣子。按下F5,彈出對話框后點擊確定。這樣就wxformbuilder簡單將咱們設計的窗體編譯C++的顯示方法,顯示出窗體的樣子。如下圖:
7、保存給python用的代碼。
點擊選中左邊樹形圖的最上面的圖標,即選中工程。再點擊標簽的python,即可出現在wxPython的代碼了。如下圖:
# -*- coding: utf-8 -*- ########################################################################### ## Python code generated with wxFormBuilder (version Oct 26 2018) ## http://www.wxformbuilder.org/ ## ## PLEASE DO *NOT* EDIT THIS FILE! ########################################################################### import wx import wx.xrc ########################################################################### ## Class MyFormMain ########################################################################### class MyFormMain ( wx.Frame ): def __init__( self, parent ): wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"wxFormBuilder 初學筆記", pos = wx.DefaultPosition, size = wx.Size( 500,181 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) bSizerMain = wx.BoxSizer( wx.VERTICAL ) self.staticText_Test = wx.StaticText( self, wx.ID_ANY, u"wxFormBuilder 初學筆記", wx.DefaultPosition, wx.DefaultSize, 0 ) self.staticText_Test.Wrap( -1 ) bSizerMain.Add( self.staticText_Test, 0, wx.ALL|wx.EXPAND, 5 ) self.text_One = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) bSizerMain.Add( self.text_One, 0, wx.ALL|wx.EXPAND, 5 ) self.button_main = wx.Button( self, wx.ID_ANY, u"求平方", wx.DefaultPosition, wx.DefaultSize, 0 ) bSizerMain.Add( self.button_main, 0, wx.ALL|wx.EXPAND, 5 ) self.text_Two = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) bSizerMain.Add( self.text_Two, 0, wx.ALL|wx.EXPAND, 5 ) self.SetSizer( bSizerMain ) self.Layout() self.Centre( wx.BOTH ) # Connect Events self.button_main.Bind( wx.EVT_BUTTON, self.squareFunction ) def __del__( self ): pass # Virtual event handlers, overide them in your derived class def squareFunction( self, event ): event.Skip()
此時,全選上面的代碼。右鍵,【Copy】。新建一個py源文件,並將全部代碼粘貼進去,保存名為CalculatorFrame.py的python代碼源文件。至此,wxPython代碼就已經生成完畢了,請不要輕易變動文件里的代碼。下面就是咱們調用窗體的主要邏輯代碼了。
8、編輯邏輯代碼
將邏輯代碼保存為Calculator.py
#!/usr/bin/python # -*- coding: UTF-8 -*- import wx import CalculatorFrame class CalcFrame(CalculatorFrame.MyFormMain): def __init__(self,parent): CalculatorFrame.MyFormMain.__init__(self,parent) def squareFunction(self,event): num = int(self.text_One.GetValue()) self.text_Two.SetValue(str(num*num)) app = wx.App(False) frame = CalcFrame(None) frame.Show(True) #start the applications app.MainLoop()
將上面的邏輯代碼保存為Calculator.py,並跟剛剛生成那個CalculatorFrame.py,放在同一個目錄里。直接在代碼編輯器里面右鍵運行。效果如下:
在第一個文本框中輸入數字,再點擊“求平方”按鈕,看看下面是不是顯示出你要的結果呢?
至此,第一個窗口設計程序的過程寫完了。
參考文獻:
1、wxPython界面設計器—wxformbuilde的簡單教程 https://blog.51cto.com/yuyongid/1717514
2、wxFormBuilder摸索--小白上手--做一個編輯器 https://blog.csdn.net/caiza3491/article/details/79529966
3、wxPython的界面設計wxformbuilde初學筆記 https://blog.csdn.net/baoyan2015/article/details/54613930
4、Python界面生成器wxFormBuilder簡單使用入門教程 https://blog.csdn.net/Thanours/article/details/83789047
5、Python界面生成器wxFormBuilder使用示例 https://www.jianshu.com/p/84ec9e5c1cb1