基于Python的GUI图形用户界面编程

news2024/11/15 23:54:16
  • 【无限嚣张(菜菜)】:hello您好,我是菜菜,很高兴您能来访我的博客,我是一名爱好编程学习研究的菜菜,每天分享自己的学习,想法,博客来源与自己的学习项目以及编程中遇到问题的总结。
  • 座右铭:尽人事,听天命
  • 个人主页:无限嚣张(菜菜)

目录

 前言    

  • 常用的GUI库
  • 1.Tkinter
  • 2.wxPython
  • 3.PyQT
  • 基于tkinter模块创建GUI程序步骤
  • 主窗口设置
  • 主窗口位置和大小
  • GUI编程整体描述 
  • 常用组件汇总列表
  •  GUI应用程序类的经典写法

 前言    

        在最早程序的设计中,程序和用户的交互都是通过控制台来完成的,而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()方法,进入事件循环

显示如下:

GUI编程整体描述 

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

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

 

常用组件汇总列表

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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非零基础自学Golang 第17章 HTTP编程(上) 17.2 HTTP客户端 17.2.4 发起POST请求

非零基础自学Golang 文章目录非零基础自学Golang第17章 HTTP编程(上)17.2 HTTP客户端17.2.4 发起POST请求第17章 HTTP编程(上) 17.2 HTTP客户端 17.2.4 发起POST请求 在上一小节我们使用了http.NewRequest来创建一个请求&#xff0c;http.NewRequest有三个参数&#xff0c;第…

web前端-javascript-String字符串的相关方法

文章目录字符串的相关方法1. 底层字符串保存2. 方法1) length 属性 获取长度2) charAt() 获取指定字符3) chartCodeAt() 获取指定字符编码4) String.formCharCode() 根据编码获取字符5) concat() 连接字符串6) indexOf() 是否含有指定内容7) lastIndexOf() 是否含有指定内容8) …

哈斯机床联网

一、设备信息确认 1、确认型号 哈斯的数控面板共有两种情况。 老版本&#xff1a; 新版本&#xff1a; 注&#xff1a;老版本通讯为串口&#xff0c;新版本通讯为网口。 2、确认通讯接口 1、数控面板的后面 老版本的串口一般都会引出在正后面的左侧位置&#xff0c;上面有…

结构型模式之代理模式(八)

常说的设计模式是23种设计模式&#xff0c;分为3大类&#xff1a; 创建型模式5种&#xff1a;工厂方法、抽象工厂、单例、建造者、原型结构型模式7种&#xff1a;适配器、代理、桥接、装饰者、外观、享元、组合行为型模式11种&#xff1a;模板方法、解释器、策略、观察者、迭代…

非零基础自学Golang 第15章 Go命令行工具 15.5 代码测试(test) 15.5.1 单元测试

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.5 代码测试(test)15.5.1 单元测试第15章 Go命令行工具 15.5 代码测试(test) go test命令用于对Go语言编写的代码包进行测试。 可以指定要测试的文件&#xff0c;也可以直接对整个包进行测试&#xff0c…

[Java实战]Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]

Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]1.Squaretest是什么?2.如何配合JUnit使用...?3.生成的java文件长啥样?4.如何生成和使用?5.如何用生成的XXXTest.java文件进行单元测试...6.观察结果7.单元测试成功8.源码地址为了好好写单元测试,提…

Dell inspiron 7580硬件升级_更换电池加内存条移动硬盘

文章目录前言硬件升级确认硬件型号参数拆机验证硬件更新后记前言 手上的笔记本[Dell inspiron 7580]用了几年了&#xff0c;还是刚上大学的时候买的&#xff0c;现在感觉这个配置用起来有点吃力了&#xff0c;稍微更新一下配置准备再战两年┭┮﹏┭┮ Light em up, light em u…

参数扫描文件的用法

摘要 通过控制和改变所选参数有助于检查给定光学系统的性能。 VirtualLab Fusion提供了完全灵活且计算效率高&#xff08;通过并行化&#xff09;的参数运行&#xff0c;使用户可以指定不同的参数变化方式。 作为示例&#xff0c;它可以用于所研究的任何系统参数的公差分析。 分…

Moonbeam生态说|Moonbeam Ignite重燃DeFi生态活力

日前&#xff0c;Moonbeam Network生态中两家活跃度最高的DeFi协议Moonwell和StellaSwap受邀参加Moonbeam中文社区BinanceLive直播。 作为Moonbeam生态的老朋友&#xff0c;两家项目方的联合创始人对赋能生态胸有成竹。 今年11月&#xff0c;Moonwell和StellaSwap都得到社区投票…

MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 × 51 USING SPARSITY

论文链接: https://arxiv.org/pdf/2207.03620.pdf code: https://github.com/VITA-Group/SLaKlink MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 51 USING SPARSITY一、引言&#xff08;二&#xff09;、大内核注意力&#xff08;二&#xff09;、卷积中的大…

I/O多路转接 —— select、poll、epoll

目录 一、概述 二、I/O多路转接 —— select 1. select函数的基本介绍 2. select的基本工作流程 3. 文件描述符的就绪条件 4. 基于select函数设计的服务器 1. 基本套接字的编写 2. select服务器的编写 5. select的优缺点 三、I/O多路转接 —— poll 1. poll函数的基…

LeetCode-1799- N 次操作后的最大分数和

1、状态压缩动态规划 我们可以使用动态规划来解决问题&#xff0c;我们利用数组dp[s]dp[s]dp[s]来表示状态为s时&#xff0c;能够去到的最大分数。由于题目限定了n的范围&#xff0c;因此我们可以利用二进制数字s来压缩状态&#xff0c;我们利用长度为m的二进制数s的每一位来表…

Javascript | Popper | 如何下载popper.min.js 与 各类js资源

文章目录问题描述解决办法问题描述 作为一个JS生手只知道使用CDN在线引用或者使用下载好的本地JS文件。 比如popper.js官网显示如下图&#xff0c;没有任何的Download按钮&#xff0c;有部分其他类的JS官网也存在同样的情况。 虽然有提供CDN&#xff0c;但因为国内网络原因&am…

Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型&#xff0c;如&#xff1a;数组、字典等。 Lua table 使用关联型数组&#xff0c;你可以用任意类型的值来作数组的索引&#xff0c;但这个值不能是 nil。 Lua table 是不固定大小的&#xff0c;你可以根据自己需要…

什么是python,为什么要学习Python?

什么是python&#xff1f; 人工智能概念的兴起&#xff0c;使得Python的发展非常迅速&#xff0c;关注度也是越来越高。作为现在最热门的编程语言&#xff0c;Python简单优雅&#xff0c;用尽量少的代码写出最明白的程序&#xff0c;简单易学的特性使其拥有超高的人气&#xf…

VUE—跳转传参

目录 一、基本使用 二、$route和$router 三、路由跳转的两种方式 四、编程式导航 五、传参 六、props 一、基本使用 1、安装vue-router cnpm install --save vue-router3 如果大家用的是vue2&#xff0c;下载vue-router不设置版本好的话&#xff0c;可能会因为版本过高…

大数据Kudu(十一):ClickHouse与Kudu对比

文章目录 ClickHouse与Kudu对比 ClickHouse与Kudu对比 kudu 2015年9月28号出现第一个测试版本0.5.0,2016年2月26第一个正式版0.7.发布。clickhouse 2018年3月开源正式版出现。两者都是列式存储,都可以针对数据进行实时OLAP分析,两者的区别如下: 方面 Kudu

零基础小白如何做到5个月学成Python?学习规划在这里!

自学半个月没用不是正常的吗&#xff1f;一般来说&#xff0c;Python培训需要脱产学习5个月左右&#xff0c;这样的市场既能掌握工作所需的技能&#xff0c;还能够积累一定的项目经验。 当然&#xff0c;如果你想要在Python的路上越走越远&#xff0c;则需要不断的积累和学习&…

实验二 单隐层神经网络

一、实验目的 &#xff08;1&#xff09;学习并掌握常见的机器学习方法&#xff1b; &#xff08;2&#xff09;能够结合所学的python知识实现机器学习算法&#xff1b; &#xff08;3&#xff09;能够用所学的机器学习算法解决实际问题。 二、实验内容与要求 &#xff08…

我们是如何构建自己的可观测性的

引言 近日&#xff0c;关于云平台自身的可靠性问题又成为大家关注的焦点。系统一定会有故障&#xff0c;相信作为用户都能理解&#xff0c;但用户需要在故障发生后&#xff0c;能尽快知晓造成故障的根本原因和修复计划&#xff0c;以便有效调整受影响的业务来降低损失&#xf…