學python3編程gui用wxpython界面庫示例

學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()

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章