WxPyhon入門-part2

前面介紹了基本的框架、文本框锁摔、按鈕的方法和如何建立第一個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


style類型

用四級水平來看一看舞肆,基本能猜到。博杖。就是它了
于是我們文本框這樣定義:

myTextCtrl = wx.TextCtrl(self,style = wx.TE_MULTILINE)

3椿胯、最后添加一個簡單的狀態(tài)欄

self.CreateStatusBar()

我們的狀態(tài)欄顯示的是當(dāng)鼠標(biāo)選到子菜單時的一個注釋,起作用的代碼是菜單項的append()方法剃根。我們來看一下API文檔

append方法

粗暴翻譯一下压状,就是可以在狀態(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é)果:


運行結(jié)果

狀態(tài)欄效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市镣丑,隨后出現(xiàn)的幾起案子舔糖,更是在濱河造成了極大的恐慌,老刑警劉巖莺匠,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金吗,死亡現(xiàn)場離奇詭異,居然都是意外死亡趣竣,警方通過查閱死者的電腦和手機摇庙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遥缕,“玉大人卫袒,你說我怎么就攤上這事〉ハ唬” “怎么了夕凝?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵宝穗,是天一觀的道長。 經(jīng)常有香客問我码秉,道長逮矛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任转砖,我火速辦了婚禮须鼎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘府蔗。我一直安慰自己晋控,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布礁竞。 她就那樣靜靜地躺著糖荒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪模捂。 梳的紋絲不亂的頭發(fā)上捶朵,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音狂男,去河邊找鬼综看。 笑死,一個胖子當(dāng)著我的面吹牛岖食,可吹牛的內(nèi)容都是我干的红碑。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼泡垃,長吁一口氣:“原來是場噩夢啊……” “哼析珊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔑穴,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤忠寻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后存和,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奕剃,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年捐腿,在試婚紗的時候發(fā)現(xiàn)自己被綠了纵朋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡茄袖,死狀恐怖操软,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宪祥,我是刑警寧澤寺鸥,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布猪钮,位于F島的核電站,受9級特大地震影響胆建,放射性物質(zhì)發(fā)生泄漏烤低。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一笆载、第九天 我趴在偏房一處隱蔽的房頂上張望扑馁。 院中可真熱鬧,春花似錦凉驻、人聲如沸腻要。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雄家。三九已至,卻和暖如春胀滚,著一層夾襖步出監(jiān)牢的瞬間趟济,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工咽笼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顷编,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓剑刑,卻偏偏與公主長得像媳纬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子施掏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350