1、引言
wxPython 是一個開源、跨平台的 GUI 工具包,旨在提供一種 Python 編程語言和 wxWidgets C++類庫相結合的開發體驗。wxWidgets 是一個跨平台的 GUI 工具包,包含一組 C++類庫和可執行文件,用於創建跨平台的 GUI 應用程序。
wxPython 提供了開發 Gui 應用的完整工具集,可以輕鬆創建各種窗口、按鈕、文本輸入框和多媒體等各種控件,而無需深入了解 C++ 的底層代碼。
本篇文章將介紹如何使用 wxPython 編寫 GUI 界面,使用 wxPython 常規的 GUI 控件和各種高級控件,以及處理各種用戶事件等。
2、正文
一、wxPython 的基本用法
1、安裝 wxPython,可以通過pip命令安裝:
pip install -U wxPython
2、編寫第一個 wxPython 程序:
import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "My Frame", size=(300,300)) panel = wx.Panel(self, -1) button = wx.Button(panel, -1, "Hello", pos=(50,50)) self.Bind(wx.EVT_BUTTON, self.OnClick, button) def OnClick(self, event): wx.MessageBox("Hello wxPython!") if __name__ == '__main__': app = wx.App() frame = MyFrame() frame.Show(True) app.MainLoop()
該程序創建了一個包含一個按鈕的窗口,點擊按鈕會彈出提示框。該程序中使用了 wxPython 的 Frame、Panel 和 Button 控件,以及事件綁定。
二、wxPython 常用 GUI 控件
wxPython中常用的GUI控件如下:
- StaticText:用於展示靜態的文本
- TextCtrl:用於輸入和清空文本
- Button:用於觸發一個操作
- CheckBox:用於選擇和取消選擇一個選項
- RadioButton:用於單選一個選項
- ListBox:用於展示多個選項,可以選擇其中一個或多個
- ComboBox:用於展示多個選項,只能選擇其中一個
- Slider:用於選擇一個數值
- Menu:用於創建菜單
- ToolBar:用於創建一個工具條
- StatusBar:用於展示狀態信息
三、處理用戶事件
wxPython 使用事件來處理用戶界面所觸發的各種操作,如單擊按鈕、單選框、複選框和列表框,移動鼠標等等。每種事件都擁有一個名稱或 ID,當該事件發生時,相應的函數將被調用。
下面是一個響應按鈕點擊事件的示例:
import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "My Frame", size=(300,300)) panel = wx.Panel(self, -1) button = wx.Button(panel, -1, "Hello", pos=(50,50)) self.Bind(wx.EVT_BUTTON, self.OnClick, button) def OnClick(self, event): wx.MessageBox("Hello wxPython!") if __name__ == '__main__': app = wx.App() frame = MyFrame() frame.Show(True) app.MainLoop()
四、高級控件
wxPython 提供了一些高級控件,如 Notebook、MDI 框架、TreeCtrl、Grid、Splitter 等,使得應用程序的界面更加複雜和靈活。
下面是一個使用 Notebook 控件的示例:
import wx import wx.lib.scrolledpanel as scrolled class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "My Frame", size=(600,400)) splitter = wx.SplitterWindow(self, -1) panel1 = wx.Panel(splitter, -1) panel2 = wx.Panel(splitter, -1) self.notebook = wx.Notebook(panel1, -1) self.panel3 = scrolled.ScrolledPanel(self.notebook, -1) self.panel4 = scrolled.ScrolledPanel(self.notebook, -1) self.panel3.SetupScrolling() self.panel4.SetupScrolling() self.notebook.AddPage(self.panel3, "Page 1") self.notebook.AddPage(self.panel4, "Page 2") self.tree_ctrl = wx.TreeCtrl(panel2, -1, style=wx.TR_HIDE_ROOT) root = self.tree_ctrl.AddRoot("root") child1 = self.tree_ctrl.AppendItem(root, "child 1") child2 = self.tree_ctrl.AppendItem(root, "child 2") child3 = self.tree_ctrl.AppendItem(root, "child 3") sizer1 = wx.BoxSizer(wx.VERTICAL) sizer2 = wx.BoxSizer(wx.VERTICAL) sizer1.Add(self.notebook, 1, wx.EXPAND) sizer2.Add(self.tree_ctrl, 1, wx.EXPAND) panel1.SetSizer(sizer1) panel2.SetSizer(sizer2) splitter.SplitVertically(panel1, panel2, 120) self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree_ctrl) def OnSelChanged(self, event): item = event.GetItem() self.notebook.SetSelection(item.GetID()-1) if __name__ == '__main__': app = wx.App() frame = MyFrame() frame.Show(True) app.MainLoop()
該程序使用了 wxPython 的 Notebook 控件來展示兩個 ScrolledPanel,並使用 wx.TreeCtrl 將其布局在一個 SplitterWindow 上。當在樹形控件中選擇一個項目時,相應的 ScrolledPanel 會被展示。
3、小結
本文介紹了使用 wxPython 開發 GUI 應用程序的基本知識和常用控件,以及處理用戶事件和高級控件。wxPython 提供了一套完整的工具和庫,開發者可以使用它快速創建跨平台、漂亮而且有用的圖形用戶界面。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/188567.html