这个项目较小,因为需要的大部分功能都已经在上一个项目中编写好了。在这个项目中,你将看到给既有Python程序添加GUI非常容易。
1.问题描述
在这个项目中,我们将扩展之前编写的文件共享系统:添加GUI客户端,让它使用起来更容易。这意味着可能有更多的人选择使用它。(当然,这个程序的主旨是让用户能够共享文件。)这个项目的第二个目标是展示当程序模块化程度足够高后,扩展起来将非常容易。(这也是使用面向对象编程的原因之一。)
这个GUI必须满足如下需求。
就这些。由于系统的大部分功能已经实现,GUI部分是一个相对简单的扩展。
2.有用的工具
除之前使用的工具外,还需要使用大部分Python版本都自带的工具包Tkinter。如果你想使用其他GUI工具包,可以尽管去用。这个项目将让你对如何使用喜欢的工具实现功能有个大致的认识。
3.准备工作
开始这个项目前,应准备好前一个项目程序,并像前一节指出的那样安装一个GUI工具包。除此之外,这个项目无需做其他的准备工作。
4.初次实现
这个客户端提供了一个界面(方法fetch),用户可通过它来访问服务器的功能。下面来看一下与GUI相关的代码。
之前的客户端是cmd.Cmd的子类,现在的客户端是tkinter.Frame的子类。虽然并非必须从tkinter.Frame派生出子类(你可以创建完全独立的Client类),但这是一种比较自然地编码组织方式。与GUI相关的设置工作是在一个独立的方法中完成的,这个名为create_widgets的方法被称为构造函数。它创建一个用于输入文件名的的文本框(Entry)以及一个用于获取指定文件的按钮(Button),其中的按钮操作被设置为方法fetch_handler。这个事件处理程序很像之前的do_fetch,它获取self.input(文本框)中的查询,并在一条try/except语句中调用self.server.fetch。
初次实现的源代码如图所示。
除前面解释过的相对简单的代码外,这个GUI客户端的工作原理和之前基于文本的客户端相同,使用方式也类似。要运行这个程序,需要指定包含URL的文件、要共享的文件所在的目录以及节点的URL,如下所示:
python simple_guiclient.py urlfile.txt files/ http://localhost:8000
请注意,文件urlfile.txt必须包含其他一些节点的URL,这样这个程序才能发挥作用。为进行测试,可在同一台计算机上启动多个程序(使用不同的端口号),也可在不同的计算机上运行它们。下图显示了这个客户端的GUI。
这个实现管用,但只实现了部分功能——它还应列出服务器文件目录包含的文件。为此,必须对服务器(节点)本身进行扩展。
本文分享自 Python机器学习算法说书人 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!