學python3編程gui用wxpython界面庫示例
linux下安裝需要先安裝依賴
sudo apt-get install libgtk-3-dev -y
sudo apt-get install freeglut3-dev libgstreamer-plugins-base1.0-dev -y
sudo pip install wxpython
如果有些依賴版本不匹配可能太高也不行,可能失敗,需要卸載裝上特定低版本
sudo pip uninstall numpy
sudo pip install numpy=1.16
代碼寫界面太累,照舊找到可視化設計界面工具wxformbuilder
https://github.com/wxFormBuilder/wxFormBuilder/releases
linux下可以下載flatpak格式,源代碼編譯安裝不易成功,依賴太多了
sudo apt install flatpak flatpak-builder
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.freedesktop.Platform//18.08
flatpak install flathub org.wxformbuilder.wxFormBuilder
也可下載後本地安裝,就是網址太慢了
https://github.com/wxFormBuilder/wxFormBuilder/releases/download/v3.9.0/wxformbuilder.flatpak
最後找了一個瀏覽器插件 Free Download GitHub Release Downloads CRX 1.3插件, 專門下載github release的文件,到了github頁面點擊下載鏈接,能得到真實網址,然後成功了,也不確定是不是這個插件起作用了
如果下載到了不用到flathub安裝,本地安裝:
flatpak install ./wxformbuilder.flatpak
flatpak run org.wxformbuilder.wxFormBuilder # 運行軟件
新建界面文件時先建外框frame,然後加入佈局器,然後控件,界面文字可能不好輸入中文,這些問題不大,生成py文件,引入到py調用裏
在調用方里初始化各個控件顯示文字,實現虛函數方法
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Oct 26 2018)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
import gettext
_ = gettext.gettext
###########################################################################
## Class MyFrame1
###########################################################################
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 614,347 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
bSizer3 = wx.BoxSizer( wx.HORIZONTAL )
self.path = wx.StaticText( self, wx.ID_ANY, _(u"MyLabel"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTER_HORIZONTAL )
self.path.Wrap( -1 )
bSizer3.Add( self.path, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
self.filename = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer3.Add( self.filename, 7, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
self.m_btn_open = wx.Button( self, wx.ID_ANY, _(u"test"), wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer3.Add( self.m_btn_open, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
self.m_btn_exit = wx.Button( self, wx.ID_ANY, _(u"tuichu"), wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer3.Add( self.m_btn_exit, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
bSizer1.Add( bSizer3, 1, wx.EXPAND|wx.FIXED_MINSIZE, 5 )
self.contents = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE )
bSizer1.Add( self.contents, 5, wx.EXPAND, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.m_btn_open.Bind( wx.EVT_BUTTON, self.load )
self.m_btn_exit.Bind( wx.EVT_BUTTON, self.exit )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def load( self, event ):
event.Skip()
def exit( self, event ):
event.Skip()
如上就是生成的test1.py界面代碼
下面附上調用代碼
#!/usr/bin/python3
import wx
# 導入test1.py中內容
import test1
# 創建mainWin類並傳入 test1.MyFrame1
class mainWin(test1.MyFrame1):
def __init__(self,parent):
test1.MyFrame1.__init__(self,parent)
self.path.SetLabelText("路徑")
self.filename.SetValue("/home/qzc/Documents/pythonbook/pythonbook.txt")
self.SetTitle("簡單看文件")
self.m_btn_exit.SetLabelText("退出")
self.m_btn_open.SetLabelText("加載")
# 首先,咱們從剛剛源文件中將主窗體繼承下來.就是修改過name屬性的主窗體咯。
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()
def exit(self,event):
self.Close()
if __name__ == '__main__':
# 下面是使用wxPython的固定用法
app = wx.App()
main_win = mainWin(None)
main_win.Show()
app.MainLoop()