国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

wxPython簡單入門

2019-11-14 17:32:36
字體:
供稿:網(wǎng)友

wxPython簡介

  wxPython 是 Python 語言的一套優(yōu)秀的 GUI 圖形庫,允許 Python 程序員很方便的創(chuàng)建完整的、功能鍵全的  GUI 用戶界面。 wxPython 是作為優(yōu)秀的跨平臺 GUI 庫 wxWidgets 的 Python 封裝和 Python 模塊的方式提供給用戶的。就如同Python和wxWidgets一樣,wxPython也是一款開源軟件,并且具有非常優(yōu)秀的跨平臺能力,能夠運(yùn)行在32位windows、絕大多數(shù)的Unix或類Unix系統(tǒng)、Macintosh OS X上。

本文地址:http://m.survivalescaperooms.com/archimedes/p/wxpython-begin.html,轉(zhuǎn)載請注明源地址。

首先看一個(gè)例子,它創(chuàng)建了一個(gè)有一個(gè)文本框的窗口用來顯示鼠標(biāo)的位置:

import wxclass MyFrame(wx.Frame):    def __init__(self):        wx.Frame.__init__(self, None, -1, "My Frame", size = (300, 300))        panel = wx.Panel(self, -1)        panel.Bind(wx.EVT_MOTION, self.OnMove)        wx.StaticText(panel, -1, "Pos:", pos = (10, 12))        self.posCtrl = wx.TextCtrl(panel, -1, "", pos = (40, 10))    def OnMove(self, event):        pos = event.GetPosition()        self.posCtrl.SetValue("%s, %s" %(pos.x, pos.y))if __name__ == '__main__':    app = wx.PySimpleApp()    frame = MyFrame()    frame.Show(True)    app.MainLoop()

運(yùn)行后出現(xiàn)下面的界面:

漂亮的界面是一個(gè)GUI程序必不可少的一部分,wxPython可以做到這一點(diǎn),加之Python強(qiáng)大的功能和簡潔的語法,使用得它在Python的GUI中成為一種主流。

創(chuàng)建最小的空的wxPython程序

#coding=utf-8 import wx  #導(dǎo)入必須的Python包class App(wx.App): #子類化wxPython應(yīng)用程序類    def OnInit(self):  #定義一個(gè)應(yīng)用程序的初始化方法        frame = wx.Frame(parent = None, title = 'Bare')        frame.Show()        return Trueapp = App()  #創(chuàng)建一個(gè)應(yīng)用程序類的實(shí)例app.MainLoop() #進(jìn)入這個(gè)應(yīng)用程序的主事件循環(huán)

運(yùn)行后出現(xiàn)下面的界面:

1、導(dǎo)入wxPython
你需要做的第一件事就是導(dǎo)入這個(gè)主要的wxPython包,這個(gè)包名為wx:
import wx
一旦這個(gè)包被導(dǎo)入,你就可以引用wxPython的類、函數(shù)和常量(它們以wx為前綴),如下所示:
class App(wx.App):

對于導(dǎo)入順序需要注意的是:你從wxPython導(dǎo)入其它東西之前必須先導(dǎo)入wx。通常情況下,Python中的模塊導(dǎo)入順序無關(guān)。但是wxPython中的不同,它是一個(gè)復(fù)雜的模塊。當(dāng)你第一次導(dǎo)入wx模塊時(shí), wxPython要對別的wxPython模塊執(zhí)行一些初始化工作。例如wxPython中的一些子包,如xrc模塊,它在wx模塊導(dǎo)入之前不能夠正確的工作,我們必須按下面順序?qū)耄?/p>

import wx            from wx import xrc

以上的導(dǎo)入順序只針對wxPython的模塊, Python的模塊導(dǎo)入順序沒關(guān)系。例如:

import sysimport wximport osfrom wx import xrcimport urllib

2 使用應(yīng)用程序和框架工作
一旦你導(dǎo)入了wx模塊,你就能夠創(chuàng)建你的應(yīng)用程序(application)對象和框架(frame)對象。每個(gè)wxPython程序必須有一個(gè)application對象和至少一個(gè)frame對象。 application對象必須是wx.App的一個(gè)實(shí)例或你在OnInit()方法中定義的一個(gè)子類的一個(gè)實(shí)例。當(dāng)你的應(yīng)用程序啟動(dòng)的時(shí)候, OnInit()方法將被wx.App父類調(diào)用。
下面的代碼演示了如何定義我們的 wx.App的子類:

class App(wx.App):    def OnInit(self):        frame = wx.Frame(parent = None, id= -1, title = 'Bare')        frame.Show()        return True

 上面我們定義了一個(gè)名為 App的子類。我們通常在 OnInit()方法中創(chuàng)建frame對象。上面的 wx.Frame接受三個(gè)參數(shù),僅第一個(gè)是必須的,其余的都有默認(rèn)值。
調(diào)用 Show()方法使 frame可見,否則不可見。我們可以通過給 Show()一個(gè)布爾值參數(shù)來設(shè)定 frame的可見性:

frame.Show(False)    # 使框架不可見.frame.Show(True)     # True是默認(rèn)值,使框架可見.frame.Hide()         # 等同于frame.Show(False)

定義一個(gè)應(yīng)用程序的初始化方法注意:我們沒有為我們的應(yīng)用程序類定義一個(gè) __init__()方法。在 Python中,這就意味著父方法 wx.App.__init()__將在對象創(chuàng)建時(shí)被自動(dòng)調(diào)用。如果你定義你自己的 __init__()方法,不要忘了調(diào)用其基類的 __init()__方法,示例如下:

class App(wx.App):     def__init__(self):         wx.App.__init__(self)

如果你忘了這樣做, wxPython不將被初始化并且你的 OnInit()方法也不將得到調(diào)用。

創(chuàng)建一個(gè)應(yīng)用程序?qū)嵗⑦M(jìn)入它的主事件循環(huán)

這步是創(chuàng)建 wx.App子類的實(shí)例,并調(diào)用它的 MainLoop()方法:

app = App()app.MainLoop()

一旦進(jìn)入主事件循環(huán),控制權(quán)將轉(zhuǎn)交給 wxPython。wxPython GUI程序主要響應(yīng)用戶的鼠標(biāo)和鍵盤事件。當(dāng)一個(gè)應(yīng)用程序的所有框架被關(guān)閉后,這個(gè)app.MainLoop()方法將返回且程序退出。

擴(kuò)展這個(gè)最小的空的wxPython程序

#coding=utf-8#!/usr/bin/env python #1# 在如linux和unix等操作系統(tǒng)上,它告訴操作系統(tǒng)如# 何找到執(zhí)行程序的解釋器。如果這個(gè)程序被給予的可執(zhí)行權(quán)限(例如使用chmod命令),# 我們可以在命令行下僅僅鍵入該程序的名字來運(yùn)行這個(gè)程序:這行在其它的操作系統(tǒng)上將被忽略。但是包含它可以實(shí)現(xiàn)代碼的跨平臺""""Spare.py is a atarting point for a wxpython PRogram."""#這是文檔字符串,當(dāng)模塊中的第一句是字符串的時(shí)候,這個(gè)字符串就成#了該模塊的文檔字符串并存儲在該模塊的 __doc__屬性中。import wxclass Frame(wx.Frame):  # 定義了我們自己的Frame類作為 wx.Frame的子類    passclass App(wx.App):    def OnInit(self):        self.frame = Frame(parent=None, title='Spare')  # 將對frame實(shí)例的引用作為應(yīng)用程序?qū)嵗囊粋€(gè)屬性        self.frame.Show()        self.SetTopWindow(self.frame)  # SetTopWindow()方法是一個(gè)可選的方法,它讓wxPython                                       # 方法知道哪個(gè)框架或?qū)υ捒驅(qū)⒈徽J(rèn)為是主要的。一個(gè)wxPython程序可以有幾個(gè)                                       # 框架,其中有一個(gè)是被設(shè)計(jì)為應(yīng)用程序的頂級窗口的        return Trueif __name__ == '__main__':  # Python中通常用來測試該模塊是作為程序獨(dú)立運(yùn)行還是被另一模                             # 塊所導(dǎo)入。我們通過檢查該模塊的__name__屬性來實(shí)現(xiàn)    app = App()    app.MainLoop()

運(yùn)行結(jié)果和上面的一樣,但是程序結(jié)構(gòu)更加的完整

實(shí)現(xiàn)最終的hello.py程序:

#coding=utf-8#!/usr/bin/env pythonimport wxclass Frame(wx.Frame):  # 定義一個(gè) wx.Frame的子類,以便我們更容量控制框架的內(nèi)容和外觀    """ Frame class that displays an image."""    def __init__(self, image, parent=None, id=-1,                 pos=wx.DefaultPosition,                 title='Hello, wxPython!'):  # 給我們的框架的構(gòu)造器增加一個(gè)圖像參數(shù)。這個(gè)值通過我們的應(yīng)用程序                                                # 類在創(chuàng)建一個(gè)框架的實(shí)例時(shí)提供        """Create a Frame instance and display image."""  # 用 wx.StaticBitmap控件來顯示這個(gè)圖像,它要求一個(gè)位圖        temp = image.ConvertToBitmap()        size = temp.GetWidth(), temp.GetHeight()        wx.Frame.__init__(self, parent, id, title, pos, size)        self.bmp = wx.StaticBitmap(parent=self, bitmap=temp)class App(wx.App):  # 定義一個(gè)帶有 OnInit()方法的 wx.App的子類    """Application class."""    def OnInit(self):  # 使用與 hello.py在同一目錄下的名為 wxPython.jpg的文件創(chuàng)建了一個(gè)圖像對象        image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)        self.frame = Frame(image)        self.frame.Show()        self.SetTopWindow(self.frame)        return Truedef main():  # main()函數(shù)創(chuàng)建一個(gè)應(yīng)用程序的實(shí)例并啟動(dòng)wxPython的事件循環(huán)    app = App()    app.MainLoop()if __name__ == '__main__':    main()

參考資料:

《wxPython in action》

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通化市| 加查县| 神木县| 莱阳市| 陈巴尔虎旗| 霍州市| 碌曲县| 南华县| 邵东县| 汾阳市| 益阳市| 永福县| 龙南县| 启东市| 富顺县| 西充县| 北碚区| 精河县| 灯塔市| 忻城县| 无为县| 龙口市| 房产| 朔州市| 同德县| 莆田市| 巴青县| 花莲市| 兴和县| 三都| 灵寿县| 高邮市| 新巴尔虎左旗| 平罗县| 重庆市| 城口县| 西和县| 厦门市| 松江区| 祁东县| 唐河县|