WxPyhon入門-part2

前面介紹了基本的框架、文本框、按鈕的方法和如何建立第一個(gè)wxpython程序,對程序建立的方法有了一個(gè)大概了了解,今天深入一點(diǎn),看看如何用面向?qū)ο蟮姆椒▉斫⒊绦颍瑫r(shí)了解到更多的組件和布局。

本篇您將了解
1.用更好的規(guī)范來完成代碼
2.讓你的程序更像一個(gè)電腦桌面程序
3.更多的組件

一、更加規(guī)范的方式來碼字(使用類來規(guī)范框架)

先來看看上次的最后一段代碼

import wx
app = wx.App()
my = wx.Frame(None,-1,"第一個(gè)框架程序")
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對象都揉在一起,這樣做雖然也能實(shí)現(xiàn)功能,但是后果一是閱讀維護(hù)困難,二是不符合邏輯抽象原則。試想一下,以后寫的程序有上千行代碼甚至上萬行,這樣的代碼風(fēng)格對后期維護(hù)是致命的,當(dāng)需要修改某些功能時(shí),你要做的是一行一行的來找,耗費(fèi)精力。

簡單修改一下:

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,'第一個(gè)第一個(gè)框架程序')
    app.MainLoop()

程序運(yùn)行結(jié)果:


修改后的程序運(yùn)行

可以看到,運(yùn)行結(jié)果與前面的程序相差無異。但是使用一個(gè)自定義的類把框架放進(jìn)去,這樣代碼風(fēng)格要更好,秉承了面向?qū)ο罅己玫膬?nèi)聚性。

二、讓你的程序更像一個(gè)電腦桌面程序(模擬一個(gè)記事本)

我們先打開一個(gè)windows自帶的記事本程序來看一看:


記事本

整個(gè)程序由四個(gè)部分組成
1、標(biāo)題部分
2、菜單
3、文本區(qū)域部分
4、狀態(tài)欄
前面我們寫的程序似乎差點(diǎn)東西,于是來改造一下,自己動(dòng)手做一個(gè)手動(dòng)的記事本程序。前面說過,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、添加菜單組件

菜單主要有兩個(gè)部分,1.菜單條;2.菜單選項(xiàng),點(diǎn)擊菜單選項(xiàng)后會(huì)彈出子選項(xiàng)。
根據(jù)我們使用電腦程序的邏輯,每一個(gè)菜單子選項(xiàng)歸屬在一個(gè)菜單中,而許多個(gè)菜單又組成一個(gè)菜單條。還是以記事本為例,菜單的組成如下:


菜單組成

wxpython中分別有兩個(gè)組件來對應(yīng),菜單項(xiàng):wx.Menu();菜單條:MenuBar()。清楚了邏輯關(guān)系就好辦了:首先一個(gè)程序有一個(gè)菜單條,菜單條中有N個(gè)菜單選項(xiàng),每個(gè)菜單選項(xiàng)又可以彈出N個(gè)子選項(xiàng),用代碼來表示即:

添加菜單組件

        myMenuBar = wx.MenuBar()   #菜單條
        fileMenu=wx.Menu()    #文件菜單選項(xiàng)
        #為文件菜單添加下拉框
        fileMenu.Append(wx.ID_NEW,'新建','新建一個(gè)窗口')

2、添加文本框

前面已經(jīng)說過如何添加一個(gè)文本框,不過這里我們想添加的是一個(gè)多行的文本框,而不只是一行,依然使用wx.TextCtrl()類,只不過我們需要設(shè)置一下類的風(fēng)格,可以查閱API文檔來找找。https://wxpython.org/Phoenix/docs/html/

找到TextCtrl()類其中的style


style類型

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

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

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

self.CreateStatusBar()

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

append方法

粗暴翻譯一下,就是可以在狀態(tài)欄顯示menu item的字符串

整個(gè)代碼完工,我們來看一下完整代碼:

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()    #文件菜單選項(xiàng)
        #為文件菜單添加下拉框
        fileMenu.Append(wx.ID_NEW,'新建','新建一個(gè)窗口')
        fileMenu.Append(wx.ID_OPEN,'打開','打開一個(gè)文件')
        fileMenu.Append(wx.ID_SAVE, '保存', '保存文件')
        fileMenu.Append(wx.ID_SAVEAS, '另存為', '另存為文件')


        editMenu = wx.Menu()  # 編輯菜單
        helpMenu = wx.Menu() #幫助菜單

        #將單個(gè)菜單添加到菜單欄中
        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()

運(yùn)行結(jié)果:


運(yùn)行結(jié)果

狀態(tài)欄效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容