七日Python之路--第三天(之不安分 wxPython)

Python有好多个GUI框架,wxPython比较流行,so just do it.....   Win下各种不爽,又换Ubuntu

跟着教程做个记事本。视频地址:http://www.pythoner.cn/course/topic/wxPython-gui/

(一)wxpython的安装

Ubuntu下的安装,还是比较简单的。

#使用:apt-cache search wxpython 测试一下,可以看到相关信息
[email protected]:~/Python$ apt-cache search wxpython
cain - simulations of chemical reactions
cain-examples - simulations of chemical reactions
cain-solvers - simulations of chemical reactions
gnumed-client - medical practice management - Client
...

#这样的话,直接使用: sudo apt-get install python-wxtools 即可安装
[email protected]:~/Python$ sudo apt-get install python-wxtools
[sudo] password for dizzy: 
Reading package lists... Done
Building dependency tree 
...

测试是否安装成功。进入Python,import wx 不报错,即可

[email protected]:~/Python$ python
Python 2.7.3 (default, Apr 20 2012, 22:44:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>>
(二)显示出一个窗口
#!/usr/bin/python
#coding:utf-8

import wx

def main():
    app = wx.App()
    win = wx.Frame(None)
    win.Show()
    app.MainLoop()

if __name__ == ‘__main__‘:
    main()
#这便是一个最简单的可视化窗口的实现
(三)添加可视化组建及简单布局
#coding:utf-8

import wx

def main():
    app = wx.App()
    win = wx.Frame(None,title=‘NotePad‘,size=(440,320))
    #很明显,title就是标题,size就是大小

    bt_open = wx.Button(win,label=‘open‘,pos=(275,2),size=(80,30))
    bt_save = wx.Button(win,label=‘save‘,pos=(355,2),size=(80,30))
    #label就是按钮显示的标签,pos是控件左上角的相对位置,size就是控件的绝对大小

    text_title = wx.TextCtrl(win,pos=(5,2),size=(265,30))
    text_content = wx.TextCtrl(win,pos=(5,34),size=(430,276),style=wx.TE_MULTILINE|wx.HSCROLL)
    #style样式,wx.TE_MULTILINE使其能够多行输入,wx.HSCROOL使其具有水平滚动条

    win.Show()
    app.MainLoop()

if __name__ == ‘__main__‘:
    main()

#做过桌面软件开发的,对这个肯定很熟悉。
#由于之前学过一点VB,VC,Delphi等,学起来感觉很简单。
#将wx提供的控件添加到某个Frame上,并进行各自的属性设置即可完成
#由于文本控件的size属性,设置的为绝对值。这样就会有一些问题......
(四)界面布局管理

由于之前的控件直接绑定在Frame上,这样会有一些问题。下面将使用Panel面板进行管理。

## 当然,之前说将各种控件的位置都写成绝对位置和大小,会有一些问题。这是不对的
## 有时需要动态布局,而有时则需要静态布局

import wx

def main():
    #创建App
    app = wx.App()
    #创建Frame
    win = wx.Frame(None,title=‘NotePad‘,size=(440,320))
    win.Show()
    #创建Panel
    panel = wx.Panel(win)
    #创建open,save按钮
    bt_open = wx.Button(panel,label=‘open‘)
    bt_save = wx.Button(panel,label=‘save‘)
    #创建文本框,文本域
    text_filename = wx.TextCtrl(panel)
    text_contents = wx.TextCtrl(panel,style=wx.TE_MULTILINE|wx.HSCROLL)

    #添加布局管理器
    bsizer_top = wx.BoxSizer()
    bsizer_top.Add(text_filename,proportion=1,flag=wx.EXPAND)
    bsizer_top.Add(bt_open,proportion=0,flag=wx.LEFT,border=5)
    bsizer_top.Add(bt_save,proportion=0,flag=wx.LEFT,border=5)

    bsizer_all = wx.BoxSizer(wx.VERTICAL)
        #wx.VERTICAL 横向分割
    bsizer_all.Add(bsizer_top,proportion=0,flag=wx.EXPAND|wx.LEFT,border=5)
    bsizer_all.Add(text_contents,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)

    panel.SetSizer(bsizer_all)

    app.MainLoop()

if __name__ == ‘__main__‘:
    main()

#这个是动态布局。当然这只是一个视图而已。
#这只是个表面而已,灵魂不在此!
(五)添加控件的事件处理

直接上代码。

#!/usr/bin/python
#coding:utf-8

import wx

def openfile(evt):
    filepath = text_filename.GetValue()
    fopen = file(filepath)
    fcontent = fopen.read()
    text_contents.SetValue(fcontent)
    fopen.close()

def savefile(evt):
    filepath = text_filename.GetValue()
    filecontents = text_contents.GetValue()
    fopen = file(filepath,‘w‘)
    fopen.write(filecontents)
    fopen.close()

app = wx.App()
#创建Frame
win = wx.Frame(None,title=‘NotePad‘,size=(440,320))
#创建Panel
panel = wx.Panel(win)
#创建open,save按钮
bt_open = wx.Button(panel,label=‘open‘)
bt_open.Bind(wx.EVT_BUTTON,openfile) #添加open按钮事件绑定,openfile()函数处理
bt_save = wx.Button(panel,label=‘save‘)
bt_save.Bind(wx.EVT_BUTTON,savefile) #添加save按钮事件绑定,savefile()函数处理
#创建文本框,文本域
text_filename = wx.TextCtrl(panel)
text_contents = wx.TextCtrl(panel,style=wx.TE_MULTILINE|wx.HSCROLL)
#添加布局管理器
bsizer_top = wx.BoxSizer()
bsizer_top.Add(text_filename,proportion=1,flag=wx.EXPAND,border=5)
bsizer_top.Add(bt_open,proportion=0,flag=wx.LEFT,border=5)
bsizer_top.Add(bt_save,proportion=0,flag=wx.LEFT,border=5)

bsizer_all = wx.BoxSizer(wx.VERTICAL)
bsizer_all.Add(bsizer_top,proportion=0,flag=wx.EXPAND|wx.LEFT,border=5)
bsizer_all.Add(text_contents,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)

panel.SetSizer(bsizer_all)

win.Show()
app.MainLoop()
                                                          47,0-1        Bot

#######################################################
#      打开,保存功能基本实现,但还存在很多bug。        #
#      怎么也算自己的第二个Python小程序吧!!          #   
###########################################################################

(六)wxPython后言

算是初步了解Python桌面GUI程序开发了吧。只是路漫漫其修远兮...... 桌面开发暂告一段落,说好的正则还没弄完,简直丧心病狂。明天正则扫下尾,转攻Django ,GOGOGO!

又熬夜了,不知明天几点能起床!!!

--2014.7.24 5:01

七日Python之路--第三天(之不安分 wxPython)

时间: 2024-11-03 03:44:18

七日Python之路--第三天(之不安分 wxPython)的相关文章

七日Python之路--第三天

之前由于看基础看的觉着没意思,才去提前看一下Django的.现在突然不知到该干啥了. 不管什么语言,官方文档是必须的.so........... 莫名浮躁,实在看不下去........   待会研究 re 吧.虽然之前研究过,但许久不使用,忘的差不多了....Orz. --2014.7.23 18:37 正则表达式: 1.掌握正则表达式的规则 正则表达式是一种小型,高度专业化的编程语言,内嵌Python中,通过re模块实现. 正则表达式模式被编译成一系列字节码,由用C编写的匹配引擎执行. 字符匹

七日Python之路--第三天(之初试Django 2-2)

接上文.前面(1)(2)部分已经实现浏览器访问工程项目,并且能后台管理新创建的app. (二)第一个Django的app (3)教你开始写Django1.6的第1个app 前面已经完成了model(M)的设置.剩下的只有view(V)和urls(C)了.Django的视图部分,由views.py 和 templates完成. 在polls中,我们将创建4个视图: "index" 列表页 – 显示最新投票. "detail" 投票页 – 显示一个投票的问题, 以及用户

七日Python之路--第十一天

(一)关于模板,Template 可以在项目根目录下的settings.py 配置文件中,声明 import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates') 这样模板的默认搜索就是在根目录的'templates'文件下进行寻找. 但是,感觉还是不声明,直接使用默认的搜索路径比较好.当不进行声明时,默认搜索路径是相应的app应用目

七日Python之路--无关Python(混人乱语,不看也罢)

2014年08月06日的下午,内心压制不住的狂躁抑或浮躁.莫名的感到很多无形的压力,以至于感觉自己似乎快要死去. 怎么说呢,前些日子情人节.自己鼓足勇气去见了自己内心喜欢的女生,当然她也是知道的.我们大二还是大三认识的,差不多有两年多了吧.大学不在一个学校,还有一个原因就是她那时有男朋友,但跟男朋友的时分时合.自己由于种种原因,跟她联系也不是太多.后来毕业,自己考研失败,当然这其中全是自己的问题,既然自己做出了选择便没有什么谈论后悔的资格.后来知道她考上了研究生.而我则在青岛找了一家小公司做起了

七日Python之路--第十二天(Django Web 开发指南)

<Django Web 开发指南>.貌似使用Django1.0版本,基本内容差不多,细读无妨.地址:http://www.jb51.net/books/76079.html (一)第一部分 入门 (1)内置数字工厂函数 int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0. (2)其他序列操作符 连接(+),复制(*),以及检查是否是成员(in, not in) '**'.join('**')   或  '***%s***%d' % (str, int)

七日Python之路--第九天

众所周知,代码这东西不是看出来的.程序这东西只哟一个标准. 下面找点开源的东西看看,学习一下大婶们的犀利编码...... 推荐一下: 虽然有点老了:http://www.iteye.com/topic/405150,还有就是GitHub上面搜索一下Django就能出来很多,当然还有OSChina.只是有个问题,就是Django版本不同,具体的内容可能会有些不同,但大概还是相同的.领略即可,然后书写自己的代码. 首要的还是官方文档. 看着还是有些难度的.偶然发现一个不错的Blog:http://w

七日Python之路--第五天(之找点乐子)

(一)一些闲言碎语 刚才在搜索的时候,看到别人说的一句话,大体意思如下:自从学习Python之后,就不想在学习其他语言了,只想抓紧时间写些有用的东西.细想一下,果真如此. 唉,Python魅力如此之大.感觉比Java容易的多,也可能是小众语言,因为足够小才显得足够强大.算了,不愿多想,还是多写些有意思的东西吧,哈哈. (二)一些有趣的代码 (1)一句话文件服务器 [email protected]:~$ python -m SimpleHTTPServer Serving HTTP on 0.0

七日Python之路--第一天

网上的资源师丰富的.但难免有些过时的信息,比如我现在使用的是去年下载的python3.3,而网上多数都是Python2.7. 差别比较大的就是:①读取用户输入raw_input()已经不能使用,只能使用input().②文件读取file()也不能使用了,被替换成了open(). 入门教材算是看的<简明Python教程>:地址 http://sebug.net/paper/python/index.html 一共16个章节,大约两个小时看完.这样算是入门了吧. 由于之前研究Java方向是WEB方

七日Python之路--第十三天(最后一天)

好久没更新博客了.前几天一个初级博客基本成型,然后想着怎么放到sae上,这事着实给难住了.最后算是基本完成,Django1.6需要自己上传.然后就换成了Django1.5,然后配置好数据库并将数据SQL语句插入进去即可. 博客地址: tiny234.sinaapp.com . 接下来再继续修改下细节部分.再将代码放到github上. 剩下的,开始研究Spider了..... --2014年08月18日20:57:23 梦醒人不见,泪眼映孤灯.   --临江仙   <铁磁铜牙纪晓岚> 七日Pyt