1. python如何进行GUI桌面开发有哪些不错的库可以推荐
Python进行GUI开发的库其实很多,下面我简单介绍几个不错桥和的库,感兴趣的朋友可以自己尝试一下,实验环境win10+python3.6+pycharm5.0,主要内容如下:
tkinter
这个就不用多说了,python自带的GUI开发标准库,对于开发小型简单的应用来说,完全可以了,开源、跨平台,使用起来非常方便,下面我简单测试一下,主要代码如下:
点击运行程序,效果如下,一个窗口一个Label标签:
easygui
这个是基于tkinter的一个窗口GUI库,可以快速创建窗口对话框,包括常见的登陆对话框、注册对话框等,下面我简单介绍一下这个库的安装和使用:
1.首先,安装easygui,这个直接在cmd窗口输入安装命令“pipinstalleasygui”就行,如下:
2.安装完成后,我们就可以直接编写代码进行测试了,主要代码如下,非常简单:
点击运行这个程序,效果如下:
kivy
这是一个跨平台的GUI应用程序开发库,可以用来开发安卓、苹果应用,一套程序,可以处处运行,下面我简单介绍一下这个库的安装和使用:
1.首先,安装kivy,这个直接按官方教程安装就行,如下:
2.安装完成后,就可以直接编写代码进行测试了,主要代码如下,非常简单:
点击运行程序,效果如下,这里你可以将其打包为手机应用,安装到手机上:
wxpython
这也是一个免费、跨平台的PythonGUI开发库,相比较前面的tkinter来说,功能更为强大,控件也更多,下面我简单介绍一下这个库的安装和使用:
1.首先,安装wxpython,这个也直接在cmd窗口输入命令“pipinstallwxpython”就行,如下:
2.安装完成后,我们就可以直接编写相关代码进行测试了,主要代让枯码如下,非常简单,一个简单的文本编辑器:
点击运行这个程序,效果如下:
pyqt
这个Qt的一个Python接口库,借助于Qt强大的用户界面,Python也可以快速开发出GUI程序,组件更多,也更方便,只要你有一定的Qt基础,很快就能掌握这个库的使用,下面我简单介绍一下这个库的安装和使用:
1.首先,安装pyqt,这个直接在cmd窗口输入安装命令“pipinstallpyqt5”就行,如下,安装需要稍微等待一会儿:
2.安装完成后,我们就可以直接编写代码进行测试了,如下,一个简坦消洞单的计算器:
点击运行这个程序,效果如下:
至此,我们就介绍完了这5个PythonGUI库。总的来说,这5个库使用起来都非常不错,如果你的应用界面比较简单,功能要求不高,可以选择tkinter和easygui,如果界面比较复杂,功能要求比较复杂,可以考虑使用wxpython或pyqt,当然,你也可以使用其他GUI库,像pygame等,根据实际项目需求而定,网上也有相关资料和教程,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。
2. Python入门系列(十二)——GUI+多进程
话说,python做图形界面并不明智,效率并不高。但在某些特殊需求下还是需要我们去使用,所以python拥有多个第三方库用以实现GUI,本章我们使用python基本模块tkinter进行学习,因为需求并不大,所以不做太多拓展。
继续改写上一章的IP查询系统(= =,要玩烂了),首先略改下IpWhere.py以备调用~
然后使用tkinter模块进行图形界面的实现,调用预编译的IpWhere模块 :
额,太丑了,但基本实现我们小小的需求,在以后的py学习中,我们再涉及其他的第三方模块,此处就当是入门了解吧。
十分抱歉把这么重要的内容放在最后,要不是大佬指点,此次学习可能就要错过多进程的问题了。
Unix系统提供了forx,python可借助os模块调用,从而实现多进程,然而windows系统并不具备,所以我们选择python内置的multiprocessing多进程模块进行学习。
首先我们借助直接调用多进程来改写下我们在多线程章节用到的例子!
显然,这么写实在太蠢了,如果我们的任务量巨大,这并不合适。所以我们引入了进程池的概念,使用进程池进行改写:
在此,我们可以看到所有进程是并发执行的,同样,我们在多线程章节就讲过,主进程的结束意味着程序退出,所以我们需要借助join()方法堵塞进程。
我们知道线程共享内存空间,而进程的内存是独立的,同一个进程的线程之间可以直接交流,也就带来了线程同步的苦恼,这个我们在多线程章节已经讲过了;而两个进程想通信,则必须通过一个中间代理来实现,即我们接下来的内容:进程间通信。
进程之间肯定是需要通信的,操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制,提供了Queue、Pipes等多种方式来交换数据。我们接下来就以Queue的方式进行学习。
Queue.Queue是进程内非阻塞队列,multiprocess.Queue是跨进程通信队列,前者是各自私有,后者是各子进程共有。
还有一个在后者基础上进行封装的multiprocess.Manager.Queue()方法,如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到一条如下的错误信息: RuntimeError: Queue objects should only be shared between processes through inheritance.
接下来我们就借助进程池来进行多进程操作的改写,感谢大佬一路辅导。
我们可以看到两个子线程先执行,然后一个子线程单独执行,此处有意而为之,让大家更清晰的了解队列的使用。期间有一处我们放弃使用jion()方法堵塞,而是自己写了个循环堵塞,大家根据自己习惯来就好。
话说,真的没人吐槽么?上面的例子从需求上来讲,完全就不需要多线程好不好!emmmm,我们来点实力拓展,写一个有智商的多线程脚本,顺便结合上一节的web来一个综合篇,随便找个现实需求吧!
emmm,比如我们来到当当网买书,搜一下我们想要的书籍,发现!!太多了!!真J2乱!!看不过来!!不想翻页!!直接告诉我哪个便宜、哪个牛逼好不好!!
简单看下这个url:
http://search.dangdang.com/?key=渗透测试&ddsale=1&page_index=2
其中ddsale参数代表当当自营,page_index代表页数,key代表搜索内容,我们本次的变量只有页数。
所以我们构造请求的url为:
'http://search.dangdang.com/?key=渗透测试&ddsale=1&page_index='+str(page)
如果修改的内容不使用str字符串转化,会收到如下报错:
TypeError: can only concatenate str (not "int") to str
然后我们看一下页面内容的分布情况,本次我们关心卖什么书,卖多少钱?
对应的编写我们的正则匹配规则,当然了,有更简便的第三方库可以帮我们处理,但为了更好的形成流程性认识,我们这里依然使用正则。
我们对应我们需要的书籍名称和当前价格匹配如下:
<a title=" (.*?)" ddclick=
<span class="search_now_price">¥(.*?)</span>
那么,思路理清了,我们就开始使用多线程来写我们的小系统~
然后我们去查看一下我们的结果文件~
现在这个小系统具备的功能就是根据用户需要选择要检索的书籍,然后整理下名称和价格,开了10个线程,如果小伙伴pc给力的话可以继续加。简单的异常处理机制和界面交互,基本满足日常所需。
3. Python GUI库大汇总
所有程序都是基于命令行的,这些程序可能只有一些“专业”的计算机人士才会使用。例如前面编写的五子棋等程序,恐怕只有程序员自己才愿意玩这么“糟糕”的游戏,很少有最终用户愿意对着黑乎乎的命令行界面敲命令。
相反,如果为程序提供直观的图形用户界面(Graphics User Interface, GUI),最终用户通过拖动鼠标、单击等动作就可以操作整个应用,这样的应用程序就会很受政迎(实际上,Windows 之所以广为人知,其最初的吸引力就是来自它所提供的图形用户界面)。
作为一个程序设计者,必须优先考虑用户的感受,一定要让用户感到“爽”,程序才会被需要、被使用,这样的程序才有价值。
在真正开始介绍 Python 图形界面编程之前,首先简单介绍一下 Python 的图形用户界面库。
1) PyGObject
PyGObject 库为基于 GObject 的 C 函数库提供了内省绑定,这些库可以支持 GTK+3 图形界面工具集,因此时 GObject 提供了丰富的图形界面组件。
2) PyGTK
PyGTK 基于老版本的 GTK+2 的库提供绑定,借助于底层 GTK+2 所提供的各种可视化元素和组件,同样可以开发出在 GNOME 桌面系统上运行的软件,因此它主要适用于 Linux/UNIX 系统。PyGTK 对 GTK+2 的 C 语言进行了简单封装,提供了面向对象的编程接口。其官方网址是http://www.pygtk.org/。
3) PyQt
PyQt 是 Python 编程语言和 Qt 库的成功融合。Qt 本身是一个扩展的 C++ GUI 应用开发框架,Qt 可以在 UNIX、Windows 和 Mac OS X 上完美运行,因此 PyQt 是建立在 Qt 基础上的 Python 包装。所以 PyQt 也能跨平台使用。
4) PySide
PySide 是由 Nokia 提供的对 Qt 工具集的新的包装库,目前成熟度不如 PyQt。
5) wxPython
wxPython 是一个跨平台的 GUI 工具集,wxPython 以流行的 wxWidgets(原名 wxWindows)为基础,提供了良好的跨平台外观。简单来说,wxPython 在 Windows上调用 Windows 的本地组件、在 Mac OS 上调用 Mac OS X 的本地组件、在 Linux 上调用 Linux 的本地组件,这样可以让 GUI 程序在不同的平台上显示平台对应的风格。wxPython 是一个非常流行的跨平台的 GUI 库。
如果读者有需要,则完全可以选择上面这些 Python GUI 库来开发图形用户界面。如果考虑开发跨平台的图形用户界面,则推荐使用 PyQt 或 wsPython。
4. Python GUI项目实战(二)主窗体的界面设计与实现
上一节我们介绍了登录窗体的GUI设计与功能实现,用户的账号和密码校验完成后应当跳转到主窗体内容,这一节我们将具体介绍主窗体界面的设计与功能实现!
我们新建一个900x640的窗口,顶部加入图片,下面主体部分创建两个Panedwindow容器,左边添加按钮,右边作为TreeView显示界面;
显示效果:(注意:tkinter在Mac上Panedwindow不支持修改前景色背景色)
在右边的Pannedwindow容器中,添加一个LabelFrame容器作为查询区域,在LabelFrame容器中添加一系列的Label、Entry、Button控件,可以输入学号、姓名、电话、身份证、查询、和显示全部信息:
显示效果:
创建控件、设置对齐方式和每个列的标题
显示效果:
登录成功后,在顶部显示用户姓名和登录时间,用户姓名是怎么来的?是我们在登录窗口输入的,所以这就涉及到了跨窗体数据的传递。这一点非常重要!
登录窗体(登录信息)==>主窗体
传递的基本方式:构造函数
在主窗体的构造函数中添加一个接收参数 current_user ,在登录窗体加载新窗体时将参数传递进去;
但是我们登录窗体的登录函数 login() 中用户名的变量 user 是局部变量,函数调用完了之后就变量就没有了,那怎么调用呢?
我们需要在登录窗体的构造函数中定义全局变量:
为了获取用户登录的时间,我们定义一个获取当前时间的方法:
然后在加载主窗体时将参数 self.user 和 self.get_now_time() 作为参数传递进去
另一边,我们在主窗体中,在构造函数中添加全局变量
之后,我们在Top_banner中通过标签将user信息展示出来:
这样主窗口就会显示通过登录窗口登录的用户名(首字母自动转大写)和登录时间:
效果演示:
然后我们在构造方法中把这个函数写入,以实现自动把学生信息写入到all_student_list中
文件中读取到的学生信息存储到all_student_list列表,以此作为参数传入加载TreeView的方法中;
在构造方法中调用该方法,自动把所有学生信息加载到TreeView中
运行效果:
这一节我们实现了主窗体的搭建,从界面的布局到TreeView加载全部学生信息。学生数据如此之多,如果我们想精确查看具体某个学生的信息该怎么做呢?下一讲,我们将实现学生信息的查询功能,敬请期待吧~
5. python哪些gui库比较好用呢
tk和qt
tk自带的 简单
qt第三方的 强大 跨平台