前面介紹了基本的框架、文本框锁摔、按鈕的方法和如何建立第一個wxpython程序,對程序建立的方法有了一個大概了了解际插,今天深入一點碘耳,看看如何用面向?qū)ο蟮姆椒▉斫⒊绦颍瑫r了解到更多的組件和布局腹鹉。
本篇您將了解
1.用更好的規(guī)范來完成代碼
2.讓你的程序更像一個電腦桌面程序
3.更多的組件
一藏畅、更加規(guī)范的方式來碼字(使用類來規(guī)范框架)
先來看看上次的最后一段代碼
import wx
app = wx.App()
my = wx.Frame(None,-1,"第一個框架程序")
wx.StaticText(my,label='Hello World')
wx.Button(my,-1,'ok',pos=(0,20))
wx.TextCtrl(my,pos=(0,60))
my.Show()
app.MainLoop()
我們把所有的組件還有APP對象都揉在一起,這樣做雖然也能實現(xiàn)功能功咒,但是后果一是閱讀維護困難愉阎,二是不符合邏輯抽象原則。試想一下力奋,以后寫的程序有上千行代碼甚至上萬行榜旦,這樣的代碼風(fēng)格對后期維護是致命的,當(dāng)需要修改某些功能時景殷,你要做的是一行一行的來找溅呢,耗費精力。
簡單修改一下:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title) #調(diào)用父類構(gòu)造器
self.myText = wx.StaticText(self,label='Hello World')
self.myButton = wx.Button(self,-1,'ok',pos=(0,20))
self.myTextCtrl = wx.TextCtrl(self,pos=(0,60))
self.Show()
if __name__ == '__main__':
app = wx.App()
myframe = MyFrame(None,'第一個第一個框架程序')
app.MainLoop()
程序運行結(jié)果:
可以看到猿挚,運行結(jié)果與前面的程序相差無異咐旧。但是使用一個自定義的類把框架放進去,這樣代碼風(fēng)格要更好绩蜻,秉承了面向?qū)ο罅己玫膬?nèi)聚性铣墨。
二、讓你的程序更像一個電腦桌面程序(模擬一個記事本)
我們先打開一個windows自帶的記事本程序來看一看:
整個程序由四個部分組成
1办绝、標(biāo)題部分
2伊约、菜單
3、文本區(qū)域部分
4孕蝉、狀態(tài)欄
前面我們寫的程序似乎差點東西屡律,于是來改造一下,自己動手做一個手動的記事本程序降淮。前面說過超埋,wxpython就像搭積木一樣,根據(jù)我們差的東西佳鳖,只要在前面的大桌子上對上相應(yīng)的“積木”即可:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title,size=(600,500)) #調(diào)用父類構(gòu)造器,默認(rèn)框架為(600,500)的大小
#添加菜單組件
#添加文本框組件
#添加底部的狀態(tài)欄組件
self.Show()
if __name__ == '__main__':
app = wx.App()
myframe = MyFrame(None,'我的記事本')
app.MainLoop()
現(xiàn)在我們一樣一樣的來添加
1纳本、添加菜單組件
菜單主要有兩個部分,1.菜單條腋颠;2.菜單選項繁成,點擊菜單選項后會彈出子選項。
根據(jù)我們使用電腦程序的邏輯淑玫,每一個菜單子選項歸屬在一個菜單中巾腕,而許多個菜單又組成一個菜單條面睛。還是以記事本為例,菜單的組成如下:
wxpython中分別有兩個組件來對應(yīng)尊搬,菜單項:wx.Menu()叁鉴;菜單條:MenuBar()。清楚了邏輯關(guān)系就好辦了:首先一個程序有一個菜單條佛寿,菜單條中有N個菜單選項幌墓,每個菜單選項又可以彈出N個子選項,用代碼來表示即:
添加菜單組件
myMenuBar = wx.MenuBar() #菜單條
fileMenu=wx.Menu() #文件菜單選項
#為文件菜單添加下拉框
fileMenu.Append(wx.ID_NEW,'新建','新建一個窗口')
2冀泻、添加文本框
前面已經(jīng)說過如何添加一個文本框常侣,不過這里我們想添加的是一個多行的文本框,而不只是一行弹渔,依然使用wx.TextCtrl()類胳施,只不過我們需要設(shè)置一下類的風(fēng)格,可以查閱API文檔來找找肢专。https://wxpython.org/Phoenix/docs/html/
找到TextCtrl()類其中的style
用四級水平來看一看舞肆,基本能猜到。博杖。就是它了
于是我們文本框這樣定義:
myTextCtrl = wx.TextCtrl(self,style = wx.TE_MULTILINE)
3椿胯、最后添加一個簡單的狀態(tài)欄
self.CreateStatusBar()
我們的狀態(tài)欄顯示的是當(dāng)鼠標(biāo)選到子菜單時的一個注釋,起作用的代碼是菜單項的append()方法剃根。我們來看一下API文檔
粗暴翻譯一下压状,就是可以在狀態(tài)欄顯示menu item的字符串
整個代碼完工,我們來看一下完整代碼:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title,size=(600,500)) #調(diào)用父類構(gòu)造器,默認(rèn)框架為(600,500)的大小
#添加菜單組件
myMenuBar = wx.MenuBar() #菜單條
fileMenu=wx.Menu() #文件菜單選項
#為文件菜單添加下拉框
fileMenu.Append(wx.ID_NEW,'新建','新建一個窗口')
fileMenu.Append(wx.ID_OPEN,'打開','打開一個文件')
fileMenu.Append(wx.ID_SAVE, '保存', '保存文件')
fileMenu.Append(wx.ID_SAVEAS, '另存為', '另存為文件')
editMenu = wx.Menu() # 編輯菜單
helpMenu = wx.Menu() #幫助菜單
#將單個菜單添加到菜單欄中
myMenuBar.Append(fileMenu,'文件')
myMenuBar.Append(editMenu,'編輯')
myMenuBar.Append(helpMenu,'幫助')
#設(shè)置框架的菜單欄
self.SetMenuBar(myMenuBar)
#添加文本框組件
myTextCtrl = wx.TextCtrl(self,style = wx.TE_MULTILINE) #style = wx.TE_MULTILINE跟继,這里設(shè)置文本框的風(fēng)格為多行
#添加底部的狀態(tài)欄組件
self.CreateStatusBar()
self.Show()
if __name__ == '__main__':
app = wx.App()
myframe = MyFrame(None,'我的記事本')
app.MainLoop()
運行結(jié)果: