分享好友 编程语言首页 频道列表

基于Python的GUI图形用户界面编程详细讲解

Python  2023-02-08 21:040

前言    

在最早程序的设计中,程序和用户的交互都是通过控制台来完成的,而GUI(Graphics User Interface),即图形用户编程,是Python 所提供的一个丰富的组件,可以快速的实现使用图形界面和用户交互。

常用的GUI库

1.Tkinter

tkinter(TK interface)是Python内置的标准GUI库,支持跨平台的GUI程序开发,tkinter 适合小型的GUI程序编写,也特别适合初学者学习GUI编程。

2.wxPython

wxPython是比较流行的GUI库,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes 微软基础类库)。

3.PyQT

Qt是一种开源的GUI库,适合大型GUI程序开发,PyQT是Qt工具包标准的Python实现,我们可以使用Qt Dseginer 界面设计器快速开发GUI应用程序。

基于tkinter模块创建GUI程序步骤

1.创建应用程序主窗口对象——通过类Tk的无参构造函数

from tkinter import *
from tkinter import messagebox
 
root = Tk()

2.在主窗口中,添加各种可视化组件,比如:按钮(Button) 文本框(Label)等。

btn01 = Button(root)
btn01["text"] = "创作不易,点个赞再走呗"

3.通过几何布局管理器,管理组件的大小和位置

btn01.pack()

4.事件处理

通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)

def dianzai(e):
    messagebox.showinf("Message","点个赞,让你关注我")
    print("点一个赞")
    
btn01.bind("<Button>",dainzan)

主窗口设置

主窗口位置和大小

通过geometry(wxh +/- x +/- y)进行设置,w为宽度,h为高度。+x表示距屏幕左边的距离,-x表示距屏幕右边的距离,+y表示屏幕上边的距离,-y表示屏幕下边的距离。表示宽度500,高度300,距左边100个像素,距上边100个像素。

root.title = ("来点赞呀")   # 建立标题
root.geometry("500x300+100+100")

基于上述功能,代码实现如下:

from tkinter import *
from tkinter import messagebox
 
root = Tk()  # 创建主窗口
root.title = ("来点赞呀")   # 建立标题栏
root.geometry("500x300+100+100")
btn01 = Button(root)  # 建立一个btn01对象设置,将窗口放进去
 
btn01["text"] = "创作不易,点个赞再走呗"
btn01.pack()  # 调用布局管理器,将组件对象合理的放入窗口中
 
 
def dian_zan(e):  # e 封装的事件对象
    messagebox.showinfo("Message", "点个赞")
    print("点个赞")
 
 
btn01.bind("<Button>", dian_zan)  # 绑定事件
 
root.mainloop()  # 调用组件的mainloop()方法,进入事件循环

显示如下:

基于Python的GUI图形用户界面编程详细讲解

GUI编程整体描述 

图形用户界面是由一个个组件组成的,有的组件还能在组件里边放置其他的组件,我们成为容器,Tkinter GUI组件关系如下:

基于Python的GUI图形用户界面编程详细讲解

接下来,我们在代码中查看对象的继承关系图,以button为例:ctrl + 鼠标左键,跳入button中,然后鼠标右键,查看继承结构图如下:

基于Python的GUI图形用户界面编程详细讲解

常用组件汇总列表

TKinter类 名称 简介
Toplevel 顶层 容器类,可用于为其他组件提供单独的容器;Toplevel有点类似于窗口
Button 按钮 代表按钮组件
Canvas 画布 提供绘图功能,包括直线、矩形、椭圆、多边形、位图等。
Checkbutton 复选框 可供用户勾选的复选框
Entry 单行输入框 用户可输入内容
Frame 容器 用于加载其它GUI组件
Label 标签 用于显示不可编辑的文本或图标
LabelFrame 容器 也是容器组件,类似于Frame,但他支持添加标题
Listbox 列表框 列出多个选项,供用户选择
Menu 菜单 菜单组件
Menubutton 菜单按钮 用来包含菜单的按钮(包括下拉式、层叠式等)
OptionMenu 菜单按钮 Menubutton的子类,也代表菜单按钮,可通过按钮打开一个菜单
Message 菜单按钮 类似于标签,但是可以显示多行文本,后来当Label也能显示

GUI应用程序类的经典写法

GUI应用程序的主要结构,采用的面向对象的方式,更加合理的组织代码,方便日后的维护。通过类Application组织整个GUI程序,类Application继承了Frame及通过继承拥有了父类的特征,通过构造函数_init_()初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。Frame框架是一个tkinter组件,表示一个矩形的区域。Frame一般作为容器使用,可以放置其他组件,从而实现复杂的布局。

"""
测试一个经典的GUI程序的写法,使用面向对象的方式
"""
from tkinter import *
from tkinter import messagebox
 
class Application(Frame):
    """面向对象"""
 
    def _int_(self,master=None):
        super()._init_(master)     # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
 
        self.createWidget()
 
    def createWidget(self):
        self.btn01 = Button(self)
        self.btn01["text"] = "哈哈哈哈哈哈哈"
        self.btn01.pack()
        self.btn01["command"] = self.dianzan
 
        # 创建一个退出程序
        self.btnQuit = Button(self,text="退出",command=root.destroy)
        self.btnQuit.pack()
 
    def dianzan(self):
        messagebox.showinfo("Message", "点个赞")
        print("点个赞")
 
root = Tk()
root.geometry("400x300+100+200")
root.title("点赞")
app = Application(master=root)
 
root.mainloop()

总结

原文地址:https://blog.csdn.net/zywcxz/article/details/128406919

查看更多关于【Python】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
如何在Abaqus的python中调用Matlab程序
目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误

0评论2023-03-16608

sf02_选择排序算法Java Python rust 实现
Java 实现package common;public class SimpleArithmetic {/** * 选择排序 * 输入整形数组:a[n] 【4、5、3、7】 * 1. 取数组编号为i(i属于[0 , n-2])的数组值 a[i],即第一重循环 * 2. 假定a[i]为数组a[k](k属于[i,n-1])中的最小值a[min],即执行初始化 min =i

0评论2023-02-09407

Python vs Ruby: 谁是最好的 web 开发语言?
Python 和 Ruby 都是目前用来开发 websites、web-based apps 和 web services 的流行编程语言之一。 这两种语言在许多方面有相似之处。它们都是高级的面向对象的编程语言,都是交互式脚本语言、都提供标准库且支持持久化。但是,Python 和 Ruby 的解决方法却

0评论2023-02-09819

Python+Sklearn实现异常检测
目录离群检测 与 新奇检测Sklearn 中支持的方法孤立森林 IsolationForestLocal Outlier FactorOneClassSVMElliptic Envelope离群检测 与 新奇检测很多应用场景都需要能够确定样本是否属于与现有的分布,或者应该被视为不同的分布。离群检测(Outlier detectio

0评论2023-02-09736

Python异常与错误处理详细讲解 python的异常
基础知识优先使用异常捕获LBYL(look before you leap): 在执行一个可能出错的操作时,先做一些关键的条件判断,仅当满足条件时才进行操作。EAFP(eaiser to ask for forgiveness than permission): 不做事前检查,直接执行操作。后者更优: 代码简洁,效率更高

0评论2023-02-09962

Python多线程与同步机制浅析
目录线程实现Thread类函数方式继承方式同步机制同步锁Lock条件变量Condition信号量Semaphore事件Event屏障BarrierGIL全局解释器锁线程实现Python中线程有两种方式:函数或者用类来包装线程对象。threading模块中包含了丰富的多线程支持功能:threading.curren

0评论2023-02-09409

python基础之reverse和reversed函数的介绍及使用
目录一、reverse二、reversed附:Python中reverse和reversed反转列表的操作方法总结一、reversereverse()是python中列表的一个内置方法(在字典、字符串和元组中没有这个内置方法),用于列表中数据的反转例子:lista = [1, 2, 3, 4]lista.reverse()print(lista

0评论2023-02-09878

Python多进程并发与同步机制超详细讲解
目录多进程僵尸进程Process类函数方式继承方式同步机制状态管理Managers在《多线程与同步》中介绍了多线程及存在的问题,而通过使用多进程而非线程可有效地绕过全局解释器锁。 因此,通过multiprocessing模块可充分地利用多核CPU的资源。多进程多进程是通过mu

0评论2023-02-09469

Python进程间通讯与进程池超详细讲解 python进程池的作用
目录进程间通讯队列Queue管道Pipe进程池Pool在《多进程并发与同步》中介绍了进程创建与信息共享,除此之外python还提供了更方便的进程间通讯方式。进程间通讯multiprocessing中提供了Pipe(一对一)和Queue(多对多)用于进程间通讯。队列Queue队列是一个可用

0评论2023-02-09797

Python PyMuPDF实现PDF与图片和PPT相互转换
目录安装与简介MuPDFPyMuPDFPyMuPDF使用元数据页面Page代码示例PDF转图片图片转PDFPDF转PPT文章目录 安装与简介MuPDFPyMuPDF PyMuPDF使用元数据页面Page 代码示例PDF转图片图片转PDFPDF转PPTPyMuPDF提供了PDF及流行图片处理接口。安装与简介安装:pip install

0评论2023-02-09349

更多推荐