国产探花免费观看_亚洲丰满少妇自慰呻吟_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() 強制退出。這種退出對數據是不安全的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南和县| 西畴县| 金乡县| 福建省| 通渭县| 铜鼓县| 邮箱| 瑞安市| 策勒县| 盘山县| 广安市| 宁武县| 顺平县| 潜江市| 辽源市| 鄯善县| 镇宁| 喜德县| 邵阳县| 张家港市| 济阳县| 宣武区| 安达市| 舟曲县| 杭锦旗| 鄂州市| 宜君县| 潜山县| 辽源市| 卢湾区| 南川市| 仁寿县| 泸溪县| 咸宁市| 灵璧县| 修水县| 延长县| 罗田县| 邵阳县| 茶陵县| 丽江市|