python從零開始--35 wxPython 加 wxFromBuilder處理python桌面UI
阿新 • • 發佈:2018-11-14
python的桌面UI設計和處理貌似沒有VB, C#等語言方便。今天查詢了一些資料,發現用wxPython + wxFromBuilder是一個相對簡單的方案。
1. 用pip下載最新的wxPython (我在下載的時候,發現pip預設的源下載wxPython連線不成功,切換到國內的源就成功)
2. 下載最新的的wxFromBuilder (注意下載與自己的python版本和系統版本對應的安裝檔案 ; 目前我下載的是wxFormBuilder_v3.5.1-rc1)
3. 參考這篇文章做了一個編輯器 ,這裡不再贅述。 只補充一點, 新增事件的步驟如下,這裡wxFromBuilder會自動生成Virtual event handlers,後面在具體使用UI的類(繼承自wxFromBuilder生成的類)需過載這些event handlers。
具體的程式碼:
1:從wxFromBuilder中copy過來的程式碼
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/13 14:29 # @Author : PanCheng # @Site : # @File : MyFrame1.py # @Software: PyCharm # -*- coding: utf-8 -*- ########################################################################### ## Python code generated with wxFormBuilder (version Jun 17 2015) ## http://www.wxformbuilder.org/ ## ## PLEASE DO "NOT" EDIT THIS FILE! ########################################################################### import wx import wx.xrc ########################################################################### ## Class MyFrame1 ########################################################################### class MyFrame1(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"編輯器", pos=wx.DefaultPosition, size=wx.Size(494, 370), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer1 = wx.BoxSizer(wx.VERTICAL) bSizer2 = wx.BoxSizer(wx.HORIZONTAL) self.filename = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(250, 30), 0) bSizer2.Add(self.filename, 0, wx.ALL, 5) self.loadbutton = wx.Button(self, wx.ID_ANY, u"開啟", wx.Point(-1, -1), wx.DefaultSize, 0) bSizer2.Add(self.loadbutton, 0, wx.ALL, 5) self.savebutton = wx.Button(self, wx.ID_ANY, u"儲存", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add(self.savebutton, 0, wx.ALL, 5) bSizer1.Add(bSizer2, 1, wx.EXPAND, 5) self.contents = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(480, 280), 0 | wx.HSCROLL | wx.VSCROLL) bSizer1.Add(self.contents, 0, wx.ALL, 5) self.SetSizer(bSizer1) self.Layout() self.Centre(wx.BOTH) # Connect Events self.loadbutton.Bind(wx.EVT_BUTTON, self.load) self.savebutton.Bind(wx.EVT_BUTTON, self.save) def __del__(self): pass # Virtual event handlers, overide them in your derived class def load(self, event): event.Skip() def save(self, event): event.Skip()
2:從具體處理UI事件和顯示UI的程式碼
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/13 14:37 # @Author : PanCheng # @Site : # @File : ex22.py # @Software: PyCharm import wx import sys import os import 編輯器.MyFrame1 class MyFrame(編輯器.MyFrame1.MyFrame1): def load(self, event): file = open(self.filename.GetValue()) self.contents.SetValue(file.read()) file.close() def save(self, event): file = open(self.filename.GetValue(), 'w') file.write(self.contents.GetValue()) file.close() if __name__ == "__main__": app = wx.App() main_win = MyFrame(None) main_win.Show() app.MainLoop()