iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 13
2

安裝所需套件

使用 pip 安裝

# wxWidgets
pip install wxpython

開發視窗應用程式

wxPython 運作機制
本圖出自 wxPython in Action

機制說明

  1. 應用(wx.App)運行主事件循環,用以處理作業系統發給應用的事件訊息
  2. 頂層視窗(wx.Frame)維護元件(wx.Window)組織結構
  3. 主事件循環中接收到的事件訊息,會轉送給頂層視窗,頂層視窗再轉給對應元件
  4. 元件產生的事件,也會送回主事件循環處理

第一個視窗程式

import wx

def main():
    # 建立應用
    app = wx.App()

    frame = wx.Frame(
        parent=None,    # 父層元件(已是頂層視窗,故無父層元件)
        id=wx.ID_ANY,
        title='Hello'   # 視窗標題
    )
    frame.Show()

    app.MainLoop()

if __name__ == '__main__':
    main()

加入文字元件、輸入元件和按鈕元件

import random

import wx

def main():
    app = wx.App()

    frame = wx.Frame(
        parent=None,
        id=wx.ID_ANY,
        title='Hello'
    )
    frame.Show()

    # 產生字型設定
    font = wx.Font(wx.FontInfo(10).FaceName('Consolas'))

    # 建立文字元件
    label = wx.StaticText(
        parent=frame,
        label='People',
        pos=wx.Point(10, 13),
        size=wx.Size(50, 20)
    )
    # 套用字型
    label.SetFont(font)

    # 產生按鈕元件
    button = wx.Button(
        parent=frame,
        id=wx.ID_ANY,
        label='Say',
        pos=wx.Point(70, 10),
        size=wx.Size(100, 22)
    )
    # 套用字型
    button.SetFont(font)
    # 綁定按鈕點擊事件
    button.Bind(wx.EVT_BUTTON, lambda _: input.SetValue(f'Hello {random.randint(10,100)}'))

    # 產生輸入元件
    input = wx.TextCtrl(
        parent=frame,
        id=wx.ID_ANY,
        value='Hello',
        pos=wx.Point(180, 10),
        size=wx.Size(100, 22)
    )
    # 套用字型
    input.SetFont(font)
    # 綁定文字變動事件
    input.Bind(wx.EVT_TEXT, lambda e: textarea.AppendText(f'text changed: {input.GetValue()}\n'))

    # 產生輸入元件
    textarea = wx.TextCtrl(
        parent=frame,
        id=wx.ID_ANY,
        style=wx.TE_MULTILINE,
        pos=wx.Point(10, 40),
        size=wx.Size(270, 150)
    )
    # 套用字型
    textarea.SetFont(font)
    # 設為唯讀
    textarea.SetEditable(False)

    app.MainLoop()

if __name__ == '__main__':
    main()

執行結果

進階開發

以上示範為絕對定位作法,另有可自動調整佈局的 Sizer 元件可用,但因未來開發過程會盡量迴避視窗元件的開發,故僅以此段作為基礎說明,不再針對細節繼續深入,敬請期待下節介紹的元大期貨 API 元件串接。

Would You Like To Know More?

https://wxpython.org/Phoenix/docs/


團隊系列文:

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
Hina Hina - 陣列大亂鬥
King Tzeng - IoT沒那麼難!新手用JavaScript入門做自己的玩具
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。
TaTaMo - 用Python開發的網頁不能放到Github上?Lektor說可以!!


上一篇
Day-12 程式運行:解析命令列參數
下一篇
Day-14 券商串接:串接元大期貨行情 API(一)
系列文
Python 程式交易 30 天新手入門30

尚未有邦友留言

立即登入留言