python gui入门的例子_Python GUI编程之Tkinter入门之道

相信刚学习使用Python进行GUI编程的时候,肯定都会听过Tkinter,毕竟是standard Python interface to the Tk GUI toolkit.用来写一些小程序还是很方便的。但如果是刚接触GUI编程的话肯定是被官方文档搞的有些懵,毕竟还没弄清楚套路。之前使用过Tkinter,但是有段时间没碰了,最近又要写个小程序需要再捡起来,本想着搜索下别人的文章迅速熟悉以下,但是搜索水平有限,并没有搜到合适的文章,往往都是怎么怎么弄一下,跑起来GUI形式的Hello World就完了,或者写一堆又不不提套路,反而不如去看编排好看一点的文档了。所以这里记录一下,当作自己的学习笔记,也希望能帮助到需要的人。注: 以下所述运行环境都是Python2.7

先跑起来看看

4058205387.png

很显然,像Tk()这种函数,都是从Tkinter导入的。Tk()运行会返回一个基本窗口组件,其实就是一个对象了。然后对这个对象进行一些操作就可以改变窗口的外观,例如绑定其他组件,改变Title什么的。最后调用mainloop方法,顾名思义,是启动主循环,展现出窗口。另外,Tkinter是事件驱动型的,例如遇到点击之类的事件,会进行一些反应,也就是用户看到的所谓的操作了。

下面一点点来说,首先来看看啥是组件以及如何绑定组件,看下面的代码:#coding: utf-8

#Date: 2016.03

#Author: Huspy blog: https://www.quarkay.com

from Tkinter import *

root = Tk()

root.title('觅而获')

w = Label(root, text="Hello, world!")

w.pack()

root.mainloop()

可见,中间实例化了一个Label对象,在Tkinter中称之为Label组件或者标签组件,然后实例化的时候有一些初始化参数,例如这个组建附着在那个组建上,像label组件顾名思义,肯定要有内容,所以也得送入相关参数,这里显然参数是命名为了text。最后相当于是搞定了组件的初始化,确认绑定到附着的组件,当然了也可以 不绑定,只不过就不会显示了,只会存在于内存中,只有绑定上去了才会显示。实际上,这里的所谓绑定,又和Tkinter的排版方式有关,后面细说。

这段代码运行效果如下图:

1355323029.png

Tkinter使用套路小结

到这里基本上就已经清楚了,整个套路就是,先初始化一个基础窗口组件,然后初始化其他组件比如输入框,标签Label,按钮之类的,初始化好了之后在绑定在相应的窗口上,但是最终要显示的组建肯定是一级一级的最后绑定到了基础窗口组建上面,最后调用基础窗口组件的mainloop方法启动主循环,窗口就生成并且显示了。Tkinter GUI 软件的工作是基于事件驱动的,比如按钮被点击什么的,执行一些操作。最后要退出就点击窗口的叉叉或者调用基础窗口组件的quit()方法即可。

细说组件

在Tkinter里面有很多的组件可供选择使用,用以完成不同的任务。这里只是说一下套路,所以挑两个典型的用的最多的来说----Label组件和Button组件。

Label组件主要用来显示文字或者图片之类的,同时有着比较丰富的表现力,怎么样放进去表现呢?显然是在初始化的时候放进去并且设置表现方式。例如我要显示蓝色底的红色文字,并且想要控制一下宽和高,可以这么初始化Label组件:t = Label(root, bg="blue", fg="white", text="www.mierhuo.com", width=40, height=2)

t.pack()

那么最终显示的时候,会是这个样子:

3163492672.png

再比如,我想要显示图片,可以这样初始化:p = PhotoImage(file="./baifeng.gif")

w = Label(root, image=p)

w.pack()

这里的PhotoImage是库里面的一个方法,用于读取图片并且封装成库其他组件、方法可以直接利用的通用型对象。这样实例化之后显示的时候如下图:

1818225298.png

再比如Button组件,就一般软件而言,显然要有文字显示,表明按钮的作用,并且点击之类的操作会出发一些程序动作,所以实例化的时候也是如此:# 变色功能按钮

bt = Button(root, text="Blink", fg="green", command=Blink.changeColor)

bt.pack()

# 退出功能按钮

bt = Button(root, text="Quit", fg="red", command=root.quit)

bt.pack()

最终显示会是这个样子:

3841815914.png

可见,按钮的表现力也还可以,还可以控制文本的颜色。所以,到这里就很清楚了,每个组件都有自己的作用,有自己独特的展现力,另外,初始化时有些资源需要先调用其他方法封装一下比如图片什么的才能加以使用。库的使用者只需要根据需要,合理使用即可。

细说Tkinter GUI布局排版方式

前面有提到,组件实例化之后是要调用pack()去绑定在父组件上面,并且一级一级最终绑定在调用mainloop()的窗口基础组件上面。这个所谓的绑定其实就是GUI布局,或者说通过这个方式进行界面的布局排版。

在Tkinter中,有三种布局方式,分别是:Grid、Pack、Place。其中Pack前面已经出现了很多次了,就pack而言,从前面的小例子就可以看到,似乎就是从上到下依次堆叠,当然,这是因为没有指定任何参数,默认是如此,其实pack的时候可以指定很多参数,比如对齐方式、填充方式、排布方向之类的。例如前面的例子如果pack的时候修改一下参数:t = Label(root, bg="blue", fg="white", text="www.mierhuo.com", width=40, height=2)

t.pack(fill='x')

这里顺便演示一下place的效果:bt_blink = Button(root, text="Blink", fg="green", command=Blink.changeColor)

bt_blink.place(relx=0.7, rely=0.7)

最终代码如下:#coding: utf-8

#Date: 2016.03

#Author: Huspy blog: https://www.quarkay.com

from Tkinter import *

root = Tk()

root.title('觅而获')

t = Label(root, bg="blue", fg="white", text="www.mierhuo.com", width=40, height=2)

t.pack(fill='x')

p = PhotoImage(file="./baifeng.gif")

w = Label(root, image=p)

w.pack()

class Blink():

flag = 1

@staticmethod

def changeColor():

if Blink.flag:

t.config(fg='red', bg='green')

Blink.flag = 0

else:

t.config(fg="white", bg="blue")

Blink.flag = 1

bt_blink = Button(root, text="Blink", fg="green", command=Blink.changeColor)

bt_blink.place(relx=0.7, rely=0.7)

bt_quit = Button(root, text="Quit", fg="red", command=root.quit)

bt_quit.pack()

root.mainloop()

最终效果如下:

2493770365.png

小结

相信到了这一步,Python Tkinter的各种套路都很清楚了,剩下的就是看文档熟悉各种组件、布局的使用方法,然后练习练习就能上手了。然而,Tkinter的文档似乎比较难找啊,对于合适的文档,我刚开始也是找了很久没找到,这里分享一下:effbot.org/tkinterbook/tkinter-index.htm#class-reference

另外,之前用Python写过一个辣鸡嗅探器,代码写的很辣鸡,不过界面也是用Tkinter做的,有兴趣的同学可以参考一下:

界面如下:

1695856389.png

(其实大半年以前就打算写此文了,结果就开了个头然后一直没动,博客也一直没更新,真是明日复明日,明日何其多。以后一定要改掉这个坏习惯,每天坚持学习,坚持写博客记录,与君共勉!)

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

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

相关文章

@async 默认线程池_SpringBoot 线程池的使用

Java大联盟帮助万千Java学习者持续成长关注作者|Musclehengblog.csdn.net/Muscleheng/article/details/81409672前言最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信。考虑发短信…

mysql 横向扩展 中间件_mysql-proxy数据库中间件架构 | 架构师之路

一、mysql-proxy简介mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server。它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上。mysql-…

python selenium对象怎么序列化_python selenium爬取斗鱼

不加延迟报错selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”.//span[class”DyListCover-hot”]”}(Session info: chrome80.0.3987.122)最开始以为是版本问题,不…

神经网络的全连接层_深度神经网络全连接层

一、概念全连接层一般在网络的最后部分做分类输出,全连接层的有m个输入和n个输出,每一个输出都和所有的输入相连,相连的权重w都是不一样的,同时每一个输出还有一个bias。二、前向全连接假设输入是4,输出是4&#xff0c…

vs 选定内容没有属性页_从智能单品,到全屋智能:2019中国智能家居发展白皮书【附82页PPT】...

2019年,智能家居行业在技术、市场和行业的变革中迎接新的挑战和机遇。一方面,AI、IoT、边缘计算全面赋能智能家居;另一方面,中国的房地产行业正在从上半场的“增量开发”,切换到下半场的“存量经营”、“楼盘精装化”政…

python决策树的应用_机器学习-决策树实战应用

1.下载2.安装:双击3.创建桌面快捷方式安装目录\bin文件夹\:找到gvedit.exe文件右键 发送到桌面快捷方式,如下图:4.配置环境变量将graphviz安装目录下的bin文件夹添加到Path环境变量中:5.验证是否安装并配置成功进入win…

【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题

写在前面:​ 本人是在学习B站黑马程序员SSM框架教程视频的时候在P37集遇到了问题,如果不解决还没办法往下接着听,老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题,全在这篇博客中得到了解决 😢解决上…

python人脸识别源码_Python 抖音机器人,让你找到漂亮小姐姐

本项目作者沉迷于抖音无法自拔,常常花好几个小时在抖音漂亮小姐姐身上。本着高效、直接地找到漂亮小姐姐的核心思想,我用 Python ADB 做了一个 Python 抖音机器人 Douyin-Bot。特性自动翻页颜值检测人脸识别自动点赞自动关注随机防 Ban自动评论原理打开…

thinkphp josn mysql_ThinkPHP:JSON字段类型的使用(ORM)

ThinkPHP5.1版本正式发布已经有一段时间了,我会陆续给大家介绍其中的新特性。今天要给大家介绍的是一个可能很多用户还不了解的一个特性:JSON字段数据支持。不过首先注意一点,本篇内容中描述的JSON字段数据的支持是从V5.1.4版本引入的。由于包…

获取http地址如何从上面抓取图片_用 Python 自动抓取妹子图

目录前言Media Pipeline启用Media Pipeline使用 ImgPipeline抓取妹子图瞎比比与送书后话前言我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需求。那我们的 scrapy 能爬取图片吗?答案是,当然的。说来惭愧&a…

错误代码0x800f0950怎么解决_解决win10安装net framework 3.5失败(错误代码 0x800F0950)...

视频教程:Win10教程 安装net framework 3.5失败(错误代码 0x800F0950)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com一:出现问题:报错代码二:解决步骤1.通过命令提示符明确自己系统版本Windows键X ,打开(命…

python 日志不会按照日期分割_django实现日志按日期分割

settings文件中配置: LOGGING { version:1, disable_existing_logger:False, formatters:{ verbose:{ format:%(asctime)s \"%(pathname)s:%(module)s:%(funcName)s:%(lineno)d\" [%(levelname)s]-%(message)s }, }, # 处理器 handlers:{ # 输…

exe打包工具哪个最好_一键分发工具哪个最好用?这款30万人都在用,很优秀!...

现代化媒体对于传播越来越重要,16年到如今,视频内容产业实在有话题度,其高效的粉丝互动机制、低资金投入高额回报等等亮点,强烈吸引着数以百万计的创造者,为了达到极其出色的阅读量,这些人往往会运用到所有…

date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sy 高的问题

作者:高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。本文为学习记录,可能有误请谅解。本文建议PC端观看,效果更佳。这个问题是一个朋友遇到的风云&#xff0c…

mysql架构组成_第 2 章 MySQL 架构组成

麻雀虽小,五脏俱全。MySQL 虽然以简单著称,但其内部结构并不简单。本章从MySQL物理组成、逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更全面深入的了解。2.1 MySQL物理文…

win2008 mysql端口_使用自定义端口连接SQL Server 2008的方法

使用过SQL Server的人大多都知道,SQL Server服务器默认监听的端口号是1433,但是我今天遇到的问题是我的机器上有三个数据库实例,这样使用TCP/IP远程连接时就产生了问题。如何在Microsoft SQL Server Management Studio里加入端口号连接呢&…

python基本命令range_Python的Range()函数(指南)

当需要执行特定次数的操作时,Python内置的range函数十分方便。 读罢本文,你将: 理解Python的range函数是如何工作的 了解Python 2和Python 3中的实现方式有何不同 看过了不少range()函数操作实例 有能力解决它的一些局限性 让我们开始吧&…

qos的_QoS 概述

QoS 是一个很大的领域,涉及到网络中的多个层次和环节。本文仅简要的谈谈 Endpoint 侧的 QoS 概念,将这些纷繁的概念名词串起来,便于理解。QoS 技术背景下图说明了 QoS workflow 中,各项技术的位置和关系摘自 < 端到端Q…

centos daemonize_手把手教你在centos上配置Django项目(超详细步骤)

前言关于Django的部署,本人也踩了很多坑,这篇文章一步一步教你怎么进行部署,只需要你按照我的步骤来就OK了!这里我们使用的服务器是一个全新的服务器,没有安装任何东西。基础环境搭建步骤★ 注意:下面的步骤…

mysql8.0.17压缩包安装教程_mysql 8.0.16 压缩包安装配置方法图文教程

本文为大家分享了mysql 8.0.16 压缩包安装配置方法,供大家参考,具体内容如下运行环境:windows 10 x641、下载zip安装包:mysql8.0 for windows zip包:,进入页面后可以不用登录。后点击底部“no thanks, just…