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

 

 

 

 

 

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