python项目练习九:文件共享2-GUI版本
来源:互联网 发布:android编程权威指南2 编辑:程序博客网 时间:2024/05/16 09:58
python项目练习九:文件共享2-GUI版本
有了前面的P2P基础,这一个练习就是给程序加一个可视化的界面,俗称GUI。
python里面的界面库有很多,如wxPython、wgGTK、tkinter,还有QT,按照书中的实例,我也使用wxPython来做界面。话说有了这个界面之后,我发现迅雷的网邻也不过如此(稍有夸张的成份),不过这个项目的练习之上再继续扩展的话,基本效果可以达到网邻的那种,如果有时间的话我可以继续扩展这个项目。下面就开始编写GUI。
这个里面的主要的问题应该都集中在界面上,远程共享的代码已经不需要修改了,只需要把现在的界面接上前面的代码就ok。这个wxPython库的使用,我觉得和以前使用java的awt编写界面没啥区别,没有什么难点,只是需要理解里面的几个概念,像是按钮、文本框、绑定事件,仅此而已。
还是来看代码吧:
from xmlrpclib import ServerProxy,Faultfrom server import Node,UNHANDLED #引入前面的程序from client import randomString #引入前面的程序from threading import Threadfrom time import sleepfrom os import listdirimport sysimport wxHEAD_START = 0.1 #SecondsSECRET_LENGTH = 100class ListableNode(Node): def list(self): return listdir(self.dirname)class Client(wx.App): def __init__(self, url, dirname, urlfile): self.secret = randomString(SECRET_LENGTH) n = ListableNode(url,dirname, self.secret) t = Thread(target=n._start) t.setDaemon(1) t.start() sleep(HEAD_START) self.server = ServerProxy(url) for line in open(urlfile): line = line.strip() self.server.hello(line) #run gui super(Client, self).__init__() def updateList(self): self.files.Set(self.server.list()) def OnInit(self): win = wx.Frame(None, title="File Sharing Client",size=(400,399)) bkg = wx.Panel(win) self.input = input = wx.TextCtrl(bkg) submit = wx.Button(bkg, label="Fetch",size=(80,25)) submit.Bind(wx.EVT_BUTTON, self.fetchHandler) hbox = wx.BoxSizer() hbox.Add(input, proportion=1, flag=wx.ALL | wx.EXPAND, border=10) hbox.Add(submit, flag=wx.TOP | wx.BOTTOM | wx.RIGHT, border=10) self.files = files = wx.ListBox(bkg) self.updateList() vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(hbox, proportion=0, flag=wx.EXPAND) vbox.Add(files, proportion=1,flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=10) bkg.SetSizer(vbox) win.Show() return True def fetchHandler(self, event): query =self.input.GetValue() try: self.server.fetch(query, self.secret) self.updateList() except Fault,f: if f.faultCode != UNHANDLED: raise print "Counldn't find the file",querydef main(): urlfile, directory,url = sys.argv[1:] client = Client(url, directory, urlfile) client.MainLoop()if __name__ == '__main__': main()
这个相比于前面关于xml-rpc的实现就简单的多了。
关于扩展的思路,目前我的想法是这样的,现在的程序监听的端口是通过命令行参数决定的。我觉得可以直接写到窗口上输入或者写死在程序里,毕竟是要使用固定的端口通信的,还有共享的文件夹以及urls里面的节点,都可以是固定的。
另外可以添局域网查询功能,就像是现在迅雷网邻的换一换,就是查找当前局域网内正在使用我们软件的所有用户,然后把他们的资源情况列到我们的列表上。
0 0
- python项目练习九:文件共享2-GUI版本
- python项目练习九:文件共享2-GUI版本
- python项目练习九:文件共享2-GUI版本
- 项目9:文件共享2--GUI版本
- python28章 项目9文件共享GUI版本
- 9. Python脚本学习实战笔记九 文件共享GUI实现
- Python项目9:文件共享2
- python项目练习八:使用XML-RPC进行远程文件共享
- python项目练习八:使用XML-RPC进行远程文件共享
- python项目练习八:使用XML-RPC进行远程文件共享
- python gui 练习
- Python GUI练习
- python练习(九)
- [Python]GUI编程练习 -- 获取天气预报
- Python项目8:使用XML-RPC进行文件共享
- Java-GUI(练习-打开文件)-(练习-保存文件)
- GUI(练习-打开和保存文件)
- python版本wifi共享工具
- Linux统计文件行数
- python项目练习十:DIY街机游戏
- java类如何装载到虚拟机
- Ubuntu 安装星际译王stardict
- JVM运行机制
- python项目练习九:文件共享2-GUI版本
- 从Linux到oracle安装需要注意的过程
- oracle 更新Clob字段
- python项目练习八:使用XML-RPC进行远程文件共享
- C# #if DEBUG
- python项目练习七:自定义公告板
- Dirac HD Sound介绍
- 进程和线程的联系和区别
- Oracle基础知识(十七) - 转换函数