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

首頁 > 學院 > 開發設計 > 正文

wxPython基本框架與運行原理--App與Frame

2019-11-14 17:48:25
字體:
來源:轉載
供稿:網友

《wxPython in Action》 chapter 1、2 筆記

wxPython 是 wxWidgets 的 Python 實現,“w” for Microsoft Windows and “x” for Unix X server.

1. 概述

wxPython 中,最基本的組件是 wx.App 和 wx.Frame。

每個 wxPython 應用必須包含這兩個組件。wx.App 只有一個,wx.Frame 至少一個。

wx.App 是應用程序,通過 event loop 管理生命周期。

wx.Frame 是窗口,通過在窗口內添加 widget(組件,如 button)控制樣式和行為。

1.1 先 import wx 再 import wx其他包

import wx 時執行一些初始化操作,其他包依賴。所以需要先導入。

非 wx 的包則不涉及順序。

1.2 先建 App 后建 Frame

所有 wxPython 的操作,必須在 application 的生命周期內進行。

所以,必須先創建 App,后創建Frame。否則報錯:

2. 最簡單的 App

對于小的應用,可以用如下方式

import wxapp = wx.PySimpleApp()  # create App firstframe = wx.Frame(None)  # define a subclass and use itframe.Show(True)app.MainLoop()

關鍵點:

  1. 創建 wx.App 實例,此處使用 wx.App 的 subclass wx.PySimpleApp。
  2. 創建 frame 并設置其樣式與行為。
  3. 啟動 App 的 MainLoop。

執行結果如下:

3. 自定義 App 的 subclass -- 推薦

更優雅的用法是:

創建 wx.App 的子類并實現 OnInit 函數 -> 創建子類的實例。

OnInit 方法中,一般創建至少一個 Frame,并設置為 show。

在 App subclass 的 OnInit 中創建 top-level frame,可以保證創建 Frame 時已有 App 存在。

 

wx.App 執行 __init__ 時會自動調用子類的 OnInit 方法。

OnInit 無入參,返回 boolean 值,若返回 False,App 立即停止。

子類的初始化一般通過子類的 OnInit 方法實現,而不使用 __init__。

若要自定義子類的 __init__ 方法,則一定要調用  wx.App.__init__(self) ,否則 OnInit 不會執行。

 

若定義 OnExit 方法,則退出時自動調用。可以不定義。

此處需要特別注意,OnExit 方法中的任何輸出,用戶通常是看不到的,包括 OnExit 執行錯誤的信息。

因為,輸出后立即關閉,速度太快以至于用戶很難看到,或者一閃而過。

 

實例代碼:

import wxclass KunthApp(wx.App):    def OnInit(self):        frame = wx.Frame(None)        frame.Show(True)        return Trueapp = KunthApp()app.MainLoop()

運行結果:

4. Frame

frame 即其他 GUI 工具中的 window,可以在屏幕上移動的窗口。

wxPython 中 window 與 widget 同義,一般不用 window 這個名字,易混淆。

 

繼承 wx.Frame 實現 subclass,并在 subclass 中封裝樣式控制。

一般在 subclass 的 __init__ 中實現樣式控制,通常需顯式調用父類 wx.Frame 的 __init__。

5. 窗口的關閉與程序退出

默認,最后一個 top-level window 退出時,wxPython Application 退出。

可以通過 wx.App 的 SetExitOnFrameDelete(flag) 方法修改默認行為。

 

top-level window 只沒有 parent 的 frame。

通過 SetTopWindow 手動指定,若沒有指定,則第一個沒有 parent 的 frame 是 parent。

 

所有窗口關閉后,wxPython 推出前,會執行 wx.App 的 OnExit 方法。

通過自定義 OnExit 方法可以手動控制退出行為,比如 退出時清理數據庫連接等非 wxPython 資源。

 

可以通過顯式調用 wx.Exit() 強制退出。這種退出對數據是不安全的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广元市| 彭水| 昌都县| 嘉鱼县| 鞍山市| 武义县| 卓尼县| 天气| 万年县| 景泰县| 渝中区| 云和县| 江西省| 莆田市| 揭阳市| 万盛区| 剑阁县| 丰都县| 凤台县| 古交市| 德格县| 张家口市| 托里县| 资中县| 吕梁市| 新安县| 林芝县| 乌拉特中旗| 绥化市| 龙南县| 石城县| 娄烦县| 屏东市| 游戏| 九龙城区| 湾仔区| 漠河县| 古交市| 孟连| 贺兰县| 容城县|