导航:首页 > 编程语言 > python最好的图形实现gui

python最好的图形实现gui

发布时间:2023-10-01 02:07:53

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加载全部学生信息。学生数据如此之多,如果我们想精确查看具体某个学生的信息该怎么做呢?下一讲,我们将实现学生信息的查询功能,敬请期待吧~

Ⅱ 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给力的话可以继续加。简单的异常处理机制和界面交互,基本满足日常所需。

Ⅲ 郁闷于Python GUI开发,有没有好的框架

作为Python开发者,你迟早都会用到图形用户界面来开发应用。幸运的是,你有很多选择,python wifi GUI编程网络列举了超过30款跨平台框架,以及Pyjamas这样的,基于谷歌Web Toolkit端口的跨浏览器web开发工具。
那么如何在众多的Python GUI框架中选择呢?近日Dice的技术专家David Bolton为Python开发者推荐了Windows、Mac和linux上最好的四款Python3开发工具(Gtk、Qt、Tk和wxWidgets)和五款框架(Kivy、PyQt、gui2Py,libavg以及wxPython)。以下是他的推荐理由:
Kivy
基于MIT授权的Kivy是最热门的Python开发框架之一,基于OPenGL ES 2,支持多平台(包括Android/iOS)原生的多点触摸,是一个围绕主循环的事件驱动型框架,因此非常适合游戏开发。Kivy框架在处理从widgets到动画方面非常强大,如果你准备开发跨平台图形应用,或者仅仅需要一个非常强大的跨平台GUI,Kivy都是非常值得关注的。
PyQt
Qt是一个跨平台的多重授权C++框架,如果你开发的是开源项目,你就可以免费使用Qt,否则你需要购买一个商业版本。Qt存在已经很长时间了,曾经属于诺基亚。Qt是一个非常全面的工具和API库,为业界所广泛使用,支持包括移动在内的多个平台,包括GPS导航仪在内的很多设备都使用了Qt。
PyGUI
与Kivy和PyQt相比,PyGUI相对简单,而且只面向Unix、Mac和Windows平台。作为MVC框架,PyGUI的开发理念是能够更好更容易地融入Python生态系统。
PyGUI的一个主要目标就是将Python应用与平台底层的GUI代码撇清,让应用能够始终忠实显示平台的原生GUI,如果你想要快速上手学习Python GUI,那么PyGUI就是你的入门选择。
Libavg
与Kivy类似,libavg也采用了OpenGL并支持硬件加速。作为开源软件,Libavg可以运行在linux、Mac OS X和Windows多个平台,功能加大丰富,例如其框架引擎可以处理数以千计的媒体对象(图片、文本、视频和摄像头输出),支持快速视频输出,并提供一个展示文本的markup系统,此外还支持blur、Chromakery等GPU着色效果。
wxPython
虽然wxPython尚未支持Python3,但资深的wxPython拥有成熟系统的教学资料,绝对值得推荐。xwPython基于wxWidgets,是一个C++写成的跨平台GUI库,支持多种文档格式,并提供文本编辑和字处理widgets。关于wxPython更多的介绍,去看看wiki吧。

Ⅳ 如何用 Python 写一个带 GUI 的科学计算程序

这是个代码, 使用Tkinter图形库,如果你是用的linux系统 记得将第一行改为from tkinter import *


这个代码实现的挺简单,并不是很复杂的科学计算器界面,你可以以此为基础,添加自己想要的东西:给你个截图:

#!/usr/bin/envpython3.4
fromTkinterimport*
importparser

root=Tk()
root.title('Calculator')

i=0

deffactorial():
"""."""
whole_string=display.get()
number=int(whole_string)
fact=1
counter=number
try:
whilecounter>0:
fact=fact*counter
counter-=1
clear_all()
display.insert(0,fact)
exceptException:
clear_all()
display.insert(0,"Error")


defclear_all():
""""""
display.delete(0,END)

defget_variables(num):
""""""
globali
display.insert(i,num)
i+=1

defget_operation(operator):
""""""
globali
length=len(operator)
display.insert(i,operator)
i+=length

defundo():
"""removesthelastenteredoperator/variablefromentrywidget"""
whole_string=display.get()
iflen(whole_string):##repeatsuntil
##
new_string=whole_string[:-1]
print(new_string)
clear_all()
display.insert(0,new_string)
else:
clear_all()
display.insert(0,"Error,pressAC")

defcalculate():
"""
Evaluatestheexpression
ref:http://stackoverflow.com/questions/594266/equation-parsing-in-python
"""
whole_string=display.get()
try:
formulae=parser.expr(whole_string).compile()
result=eval(formulae)
clear_all()
display.insert(0,result)
exceptException:
clear_all()
display.insert(0,"Error!")

root.columnconfigure(0,pad=3)
root.columnconfigure(1,pad=3)
root.columnconfigure(2,pad=3)
root.columnconfigure(3,pad=3)
root.columnconfigure(4,pad=3)

root.rowconfigure(0,pad=3)
root.rowconfigure(1,pad=3)
root.rowconfigure(2,pad=3)
root.rowconfigure(3,pad=3)

display=Entry(root,font=("Calibri",13))
display.grid(row=1,columnspan=6,sticky=W+E)

one=Button(root,text="1",command=lambda:get_variables(1),font=("Calibri",12))
one.grid(row=2,column=0)
two=Button(root,text="2",command=lambda:get_variables(2),font=("Calibri",12))
two.grid(row=2,column=1)
three=Button(root,text="3",command=lambda:get_variables(3),font=("Calibri",12))
three.grid(row=2,column=2)

four=Button(root,text="4",command=lambda:get_variables(4),font=("Calibri",12))
four.grid(row=3,column=0)
five=Button(root,text="5",command=lambda:get_variables(5),font=("Calibri",12))
five.grid(row=3,column=1)
six=Button(root,text="6",command=lambda:get_variables(6),font=("Calibri",12))
six.grid(row=3,column=2)

seven=Button(root,text="7",command=lambda:get_variables(7),font=("Calibri",12))
seven.grid(row=4,column=0)
eight=Button(root,text="8",command=lambda:get_variables(8),font=("Calibri",12))
eight.grid(row=4,column=1)
nine=Button(root,text="9",command=lambda:get_variables(9),font=("Calibri",12))
nine.grid(row=4,column=2)

cls=Button(root,text="AC",command=clear_all,font=("Calibri",12),foreground="red")
cls.grid(row=5,column=0)
zero=Button(root,text="0",command=lambda:get_variables(0),font=("Calibri",12))
zero.grid(row=5,column=1)
result=Button(root,text="=",command=calculate,font=("Calibri",12),foreground="red")
result.grid(row=5,column=2)

plus=Button(root,text="+",command=lambda:get_operation("+"),font=("Calibri",12))
plus.grid(row=2,column=3)
minus=Button(root,text="-",command=lambda:get_operation("-"),font=("Calibri",12))
minus.grid(row=3,column=3)
multiply=Button(root,text="*",command=lambda:get_operation("*"),font=("Calibri",12))
multiply.grid(row=4,column=3)
divide=Button(root,text="/",command=lambda:get_operation("/"),font=("Calibri",12))
divide.grid(row=5,column=3)

#addingnewoperations
pi=Button(root,text="pi",command=lambda:get_operation("*3.14"),font=("Calibri",12))
pi.grid(row=2,column=4)
molo=Button(root,text="%",command=lambda:get_operation("%"),font=("Calibri",12))
molo.grid(row=3,column=4)
left_bracket=Button(root,text="(",command=lambda:get_operation("("),font=("Calibri",12))
left_bracket.grid(row=4,column=4)
exp=Button(root,text="exp",command=lambda:get_operation("**"),font=("Calibri",10))
exp.grid(row=5,column=4)

##Tobeadded:
#sin,cos,log,ln
undo_button=Button(root,text="<-",command=undo,font=("Calibri",12),foreground="red")
undo_button.grid(row=2,column=5)
fact=Button(root,text="x!",command=factorial,font=("Calibri",12))
fact.grid(row=3,column=5)
right_bracket=Button(root,text=")",command=lambda:get_operation(")"),font=("Calibri",12))
right_bracket.grid(row=4,column=5)
square=Button(root,text="^2",command=lambda:get_operation("**2"),font=("Calibri",10))
square.grid(row=5,column=5)

root.mainloop()

Ⅳ 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等,根据实际项目需求而定,网上也有相关资料和教程,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

Ⅵ python哪些gui库比较好用呢

tk和qt

tk自带的 简单
qt第三方的 强大 跨平台

Ⅶ python图形界面开发用什么

作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文将推荐一些 Python GUI 框架,希望对你有所帮助。Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教程)
Kivy是一个开源工具包能够让使用相同源代码创建的程序能跨平台运行。它主要关注创新型用户界面开发,如:多点触摸应用程序。Kivy还提供一个多点触摸鼠标模拟器。当前支持的平台包括:Linux、Windows、Mac OS X和Android。
Kivy拥有能够处理动画、缓存、手势、绘图等功能。它还内置许多用户界面控件如:按纽、摄影机、表格、Spder和树形控件等。
Python 的 GUI 开发工具 Flexx
Flexx 是一个纯 Python 工具包,用来创建图形化界面应用程序。其使用 Web 技术进行界面的渲染。你可以用 Flexx 来创建桌面应用,同时也可以导出一个应用到独立的 HTML 文档。因为使用纯 Python 开发,所以 Flexx 是跨平台的。只需要有 Python 和浏览器就可以运行。如果是使用桌面模式运行,推荐使用 Firefox 。
Qt库的Python绑定 PyQt
PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有分开。PyQt是用SIP写的。PyQt 提供 GPL版和商业版。
Python图形开发包 wxPython
wxPython 是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。 wxPython 是作为优秀的跨平台 GUI 库 wxWidgets 的 Python 封装和 Python 模块的方式提供给用户的。
就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够运行在32位windows、绝大多数的Unix或类Unix系统、Macintosh OS X上。
Tk图形用户界面 Tkinter
Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。
Tkinter 由一定数量的模块组成。Tkinter位于一个名为_tkinter(较早的版本名为tkinter)的二进制模块中 。Tkinter包含了对Tk的低 级接口模块,低级接口并不会被应用级程序员直接使用,通常是一个共享库(或DLL),但是在一些情况下它也被Python解释器静态链接。
Pywin32
Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用。代码风格可以类似win32 sdk,也可以类似MFC,由你选择。如果你仍不放弃vc一样的代码过程在python下,那么这就是一个不错的选择。
Python图形界面开发包 PyGTK
PyGTK让你用Python轻松创建具有图形用户界面的程序.底层的GTK+提供了各式的可视元素和功能,如果需要,你能开发在GNOME桌面系统运行的功能完整的软件.
PyGTK真正具有跨平台性,它能不加修改地,稳定运行各种操作系统之上,如Linux,Windows,MacOS等.除了简单易用和快速的原型开发能力外,PyGTK还有一流的处理本地化语言的独特功能.
用python快速开发绚丽桌面程序 pyui4win
pyui4win是一个开源的采用自绘技术的界面库。支持C++和python。用它可以很容易实现QQ和360安全卫士这样的绚丽界面。而且,pyui4win有所见即所得界面设计器,让C++开发人员和python开发人员直接用
设计工具设计界面,而不用关心界面如何生成和运行,可以显着缩短界面开发时间。在pyui4win中,界面甚至可以完全交给美工去处理,开发人员可以只负责处理业务逻辑,把开发人员彻底从繁杂的界面处理中解放出来。
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python图形界面开发用什么的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!

阅读全文

与python最好的图形实现gui相关的资料

热点内容
php生成js文件 浏览:285
云端服务器什么作用 浏览:1
关闭系统运行命令 浏览:956
程序员哪找兼职 浏览:785
什么app可以让孩子学习数学 浏览:202
怎么弄坏空调的压缩机 浏览:983
phpexcel浮点数 浏览:484
怎么用命令方块让村民帮自己战斗 浏览:571
java随机数代码 浏览:828
主题叫火什么的app 浏览:880
智能水表加密阀门 浏览:653
月饼玩具解压 浏览:510
迅捷pdf编辑器官网 浏览:962
打造云服务器的应用 浏览:613
程序员去医院做项目 浏览:332
viper4android安卓60 浏览:493
java软件源码 浏览:161
空气压缩机的类型 浏览:355
centos图形命令行界面切换 浏览:240
新京报新闻APP什么时候有的 浏览:818