前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谁说Python不适合做GUI程序?wxFormBuilder上手教程

谁说Python不适合做GUI程序?wxFormBuilder上手教程

作者头像
小草AI
发布2019-12-23 18:11:57
3.2K0
发布2019-12-23 18:11:57
举报

作者:草yang年华

来源:https://blog.csdn.net/caiza3491/article/details/79529966

前言

很多人说Python不适合做桌面GUI程序开发,因为如果是桌面上的内容太多,全部手写代码确实不方便,还好有比如QT这样的设计工具,今天介绍另外一个工具:wxFormBuilder。

wxFormbuilder的文章非常少,也没有一个官方指南,非常坑爹。不过网络上有很多大神,参考了一下,然后自己再试试,页算是能摸索出用法。wxFormbuilder只能设计布局,事件只能链接一个名字,具体的要导出来脚本之后,在主脚本继承之后,再写。

之前用python不会GUI,总是用的脚本,非常不方便,于是想学习以下wxpython.

然而太难了,所以用wxFormBuilder来辅助一下。

一. 目的

是用wxFormBuilder设计一个这样的东东

二.大致过程

过程有点麻烦,参考文章一,在wxFormBuilder 点来点去,终于点成差不多的样子,把参数啥的在旁边填一下。

首先是一个Frame,然后加一个竖着的wxBoxSizer,然后再来一个横着的wxBoxSizer,这两个wxBoxSizer是一个按钮,不过在旁边的properties可以修改为横着的,还是竖着的

然后添加一个wxTextCtril,两个wxButton,再在下面添加一个wxTextCtrl就好了。

然后在右边的Properties点点点,填填填。点击中间的Python页,能看到有python代码在这。给他copy出来,导出保存。我给它取名叫做MyFrame1.py

三.代码如下

这个是导出的代码 MyFrame1.py

代码语言:javascript
复制
# -*- 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( 410,335 ), style = 
        wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
        self.SetSizeHintsSz( 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.Point( 5,5 ), wx.Size( 210,25 ), 0 )
        bSizer2.Add( self.filename, 0, wx.ALL, 5 )
        self.loadbutton = wx.Button( self, wx.ID_ANY, "load", wx.Point( 225,5 ), wx.Size( 80,25 ), 0 )
        bSizer2.Add( self.loadbutton, 0, wx.ALL, 5 )
        self.savebutton = wx.Button( self, wx.ID_ANY, "save", wx.Point( 315,5 ), wx.Size( 80,25 ), 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.Point( 5,35 ), 
        wx.Size( 390,260 ), wx.TE_MULTILINE|wx.HSCROLL )
        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 ):
    pass

def save( self, event ):
    pass

四.第四步

在同一个文件夹下面做一个主脚本ex22.py,调用继承上面的那个脚本。以下是代码:

代码语言:javascript
复制
# -*- coding: UTF-8 -*-  
import wx
import MyFrame1
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8')

class MyFrame(MyFrame1.MyFrame1):
# 首先,咱们从刚刚源文件中将主窗体继承下来.就是修改过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()

if __name__ == '__main__':
    app = wx.App()
    main_win = MyFrame(None)
    main_win.Show()
    app.MainLoop()

五.运行试试:

输入文件名,可以打开同目录下的文件,而且显示在下方。修改后也可以保存。

参考文章:

http://www.cnblogs.com/hester/p/4696355.html

http://blog.csdn.net/baoyan2015/article/details/54613930

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与python集中营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档