目前使用的環境:windows XP、Python2.5.4、wxPython2.8

使用的教材:Python 3技術手冊、征服Python-語言基礎與典型應用

 

第一隻程式就從大家都知道的helloword開始吧

程式碼:

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

#載入 wx模組
import wx
#建立 MyApp類別並繼承wx.App類別
class MyApp(wx.App):
#overload OnInit函數,OnInit是視窗初始化的一部份
    def OnInit(self):
'''建立wx.Frame,parent預設為None;如果不為None則Frame會一直在最上層視窗
title為視窗標題,size為視窗的長寬
'''
        frame=wx.Frame(parent=None,title="Hello,wxPython!",size=(320,240))
#顯示視窗
        frame.Show()
#回傳值,通常在OnInit函數的回傳值是True
        return True
#建立實體
app=MyApp()
#執行程式
app.MainLoop()   

 

程式執行畫面:

00_2010-02-06_194545

 

第2隻程式,加入MenuBar與StatusBar元件

程式碼:

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

import wx

#建立 MyApp類別並繼承wx.App類別
class MyApp(wx.App):
#視窗初始化
    def OnInit(self):
#設定視窗的參數,這次新增pos為視窗的起始位置
        frame=myFrame(title="視窗",pos=(100,150),size=(320,240))
        frame.Show()
        #定義這個frame是主frame
        self.SetTopWindow(frame)
        return True
       
#建立myFrame類別並繼承wx.Frame類別
class myFrame(wx.Frame):
#定義 __int__()函數
    def __init__(self,title,pos,size):
        #wx.NewId()是wxPython ID號碼,也可設成-1讓系統自動分配
        id=wx.NewId()
        #wx.Frame.__int__()函數
        wx.Frame.__init__(self,None,id,title,pos,size)
        #建立wx.menu實體
        menu=wx.Menu()
        #設定menu裡面的內容,第一格放"關於"
        menu.Append(1,"關於")
        #加入分格線
        menu.AppendSeparator
        #menu的第2格放"exit",其中&x的做用設定快速鍵,會在字的下面加底線標示
        menu.Append(2,"E&xit")
        #建立wx,MenuBar實體
        menuBar=wx.MenuBar()
        '''將menu放入menuBar裡面,欄位名稱為"檔案"
        所以menubar會長這樣: 檔案->關於 分格線 Exit
        '''
        menuBar.Append(menu,"檔案")
        #設定menuBar的實體
        self.SetMenuBar(menuBar)

#定義 main()函數
def main():
    app=MyApp()
    app.MainLoop()
#執行程式
if __name__=="__main__":
    main()

程式執行畫面:

2010-02-06_215537

 

接下來在表單(frame)裡面加入按鈕與設定事件處理

程式碼:

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

import wx

class MyApp(wx.App):
    def OnInit(self):
        frame=MyFrame(title="視窗",pos=(100,150),size=(250,200))
        frame.Show()
        self.SetTopWindow(frame)
        return True

class MyFrame(wx.Frame):
    def __init__(self,title,pos,size):
        wx.Frame.__init__(self,None,-1,title,pos,size)
       
        #建立panel
        panel=wx.Panel(self)
        #新增一個按鈕並把它加到panel裡面
        button=wx.Button(panel,label="按鈕1",pos=(25,25),size=(60,25))
        #建立事件監聽
        #按鈕關閉
        self.Bind(wx.EVT_CLOSE,self.OnCloseWin)
        #按鈕按下
        self.Bind(wx.EVT_BUTTON,self.OnClick,button)
       
    #定義按鈕案下的函數   
    def OnClick(self,event):
        wx.MessageBox("你按了按鈕","提示訊息")
       
    #定義按下關閉視窗(右上X)的函數
    def OnCloseWin(self,event):
        dlg=wx.MessageDialog(None,"確定要關閉程式?","提示訊息",wx.YES_NO)
       
        #按下YES才會關閉視窗
        if dlg.ShowModal()==wx.ID_YES:
            self.Destroy()
           
def main():
   app = MyApp()
   app.MainLoop()

if __name__=="__main__":
   main()

程式執行畫面:

1.視窗主畫面
button_1
2.按下"按鈕1"時的反應事件
button_2
3.按下視窗右上角的X的反應事件
button_3

arrow
arrow
    全站熱搜

    正義的胖虎 發表在 痞客邦 留言(0) 人氣()