七日Python之路--第三天(之不安分 wxPython)

    Python有好多個GUI框架,wxPython比較流行,so just do it.....   Win下各類不爽,又換Ubuntupython

    跟着教程作個記事本。視頻地址:http://www.pythoner.cn/course/topic/wxPython-gui/react

(一)wxpython的安裝

    Ubuntu下的安裝,仍是比較簡單的。linux

#使用:apt-cache search wxpython 測試一下,能夠看到相關信息
dizzy@dizzy-pc:~/Python$ apt-cache search wxpython
cain - simulations of chemical reactions
cain-examples - simulations of chemical reactions
cain-solvers - simulations of chemical reactions
gnumed-client - medical practice management - Client
...

#這樣的話,直接使用: sudo apt-get install python-wxtools 便可安裝
dizzy@dizzy-pc:~/Python$ sudo apt-get install python-wxtools
[sudo] password for dizzy: 
Reading package lists... Done
Building dependency tree 
...

    測試是否安裝成功。進入Python,import wx 不報錯,便可shell

dizzy@dizzy-pc:~/Python$ python
Python 2.7.3 (default, Apr 20 2012, 22:44:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>>

(二)顯示出一個窗口
#!/usr/bin/python
#coding:utf-8

import wx

def main():
    app = wx.App()
    win = wx.Frame(None)
    win.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()
#這即是一個最簡單的可視化窗口的實現

(三)添加可視化組建及簡單佈局
#coding:utf-8

import wx

def main():
    app = wx.App()
    win = wx.Frame(None,title='NotePad',size=(440,320))
    #很明顯,title就是標題,size就是大小

    bt_open = wx.Button(win,label='open',pos=(275,2),size=(80,30))
    bt_save = wx.Button(win,label='save',pos=(355,2),size=(80,30))
    #label就是按鈕顯示的標籤,pos是控件左上角的相對位置,size就是控件的絕對大小

    text_title = wx.TextCtrl(win,pos=(5,2),size=(265,30))
    text_content = wx.TextCtrl(win,pos=(5,34),size=(430,276),style=wx.TE_MULTILINE|wx.HSCROLL)
    #style樣式,wx.TE_MULTILINE使其可以多行輸入,wx.HSCROOL使其具備水平滾動條

    win.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

#作過桌面軟件開發的,對這個確定很熟悉。
#因爲以前學過一點VB,VC,Delphi等,學起來感受很簡單。
#將wx提供的控件添加到某個Frame上,並進行各自的屬性設置便可完成
#因爲文本控件的size屬性,設置的爲絕對值。這樣就會有一些問題......

(四)界面佈局管理

    因爲以前的控件直接綁定在Frame上,這樣會有一些問題。下面將使用Panel面板進行管理。小程序

## 固然,以前說將各類控件的位置都寫成絕對位置和大小,會有一些問題。這是不對的
## 有時須要動態佈局,而有時則須要靜態佈局

import wx

def main():
    #建立App
    app = wx.App()
    #建立Frame
    win = wx.Frame(None,title='NotePad',size=(440,320))
    win.Show()
    #建立Panel
    panel = wx.Panel(win)
    #建立open,save按鈕
    bt_open = wx.Button(panel,label='open')
    bt_save = wx.Button(panel,label='save')
    #建立文本框,文本域
    text_filename = wx.TextCtrl(panel)
    text_contents = wx.TextCtrl(panel,style=wx.TE_MULTILINE|wx.HSCROLL)

    #添加布局管理器
    bsizer_top = wx.BoxSizer()
    bsizer_top.Add(text_filename,proportion=1,flag=wx.EXPAND)
    bsizer_top.Add(bt_open,proportion=0,flag=wx.LEFT,border=5)
    bsizer_top.Add(bt_save,proportion=0,flag=wx.LEFT,border=5)

    bsizer_all = wx.BoxSizer(wx.VERTICAL)
        #wx.VERTICAL 橫向分割
    bsizer_all.Add(bsizer_top,proportion=0,flag=wx.EXPAND|wx.LEFT,border=5)
    bsizer_all.Add(text_contents,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)

    panel.SetSizer(bsizer_all)

    app.MainLoop()

if __name__ == '__main__':
    main()

#這個是動態佈局。固然這只是一個視圖而已。
#這只是個表面而已,靈魂不在此!

(五)添加控件的事件處理

    直接上代碼。app

#!/usr/bin/python
#coding:utf-8

import wx

def openfile(evt):
    filepath = text_filename.GetValue()
    fopen = file(filepath)
    fcontent = fopen.read()
    text_contents.SetValue(fcontent)
    fopen.close()

def savefile(evt):
    filepath = text_filename.GetValue()
    filecontents = text_contents.GetValue()
    fopen = file(filepath,'w')
    fopen.write(filecontents)
    fopen.close()

app = wx.App()
#建立Frame
win = wx.Frame(None,title='NotePad',size=(440,320))
#建立Panel
panel = wx.Panel(win)
#建立open,save按鈕
bt_open = wx.Button(panel,label='open')
bt_open.Bind(wx.EVT_BUTTON,openfile) #添加open按鈕事件綁定,openfile()函數處理
bt_save = wx.Button(panel,label='save')
bt_save.Bind(wx.EVT_BUTTON,savefile) #添加save按鈕事件綁定,savefile()函數處理
#建立文本框,文本域
text_filename = wx.TextCtrl(panel)
text_contents = wx.TextCtrl(panel,style=wx.TE_MULTILINE|wx.HSCROLL)
#添加布局管理器
bsizer_top = wx.BoxSizer()
bsizer_top.Add(text_filename,proportion=1,flag=wx.EXPAND,border=5)
bsizer_top.Add(bt_open,proportion=0,flag=wx.LEFT,border=5)
bsizer_top.Add(bt_save,proportion=0,flag=wx.LEFT,border=5)

bsizer_all = wx.BoxSizer(wx.VERTICAL)
bsizer_all.Add(bsizer_top,proportion=0,flag=wx.EXPAND|wx.LEFT,border=5)
bsizer_all.Add(text_contents,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)

panel.SetSizer(bsizer_all)

win.Show()
app.MainLoop()
                                                          47,0-1        Bot

#######################################################
#      打開,保存功能基本實現,但還存在不少bug。        #
#      怎麼也算本身的第二個Python小程序吧!!          #   
###########################################################################


(六)wxPython後言    

    算是初步瞭解Python桌面GUI程序開發了吧。只是路漫漫其修遠兮...... 桌面開發暫告一段落,說好的正則還沒弄完,簡直喪心病狂。明天正則掃下尾,轉攻Django ,GOGOGO!
框架

    又熬夜了,不知明天幾點能起牀!!!函數

                                                                                    --2014.7.24 5:01
oop

相關文章
相關標籤/搜索