第十二章 图形用户界面

第十二章 图形用户界面

GUI就是包含按钮、文本框等控件的窗口
Tkinter是事实上的Python标准GUI工具包

创建GUI示例应用程序

初探

导入tkinter

import tkinter as tk

也可导入这个模块的所有内容

from tkinter import *

要创建GUI,可创建一个将充当主窗口的顶级组件(控件)。
为此,可实例化一个Tk对象。

top = Tk()

调用函数mainloop以进入Tkinter主事件循环,而不是直接退出程序。

from tkinter import *
top = Tk()
mainloop()

效果图如下:
在这里插入图片描述

创建按钮,可实例化Button类。
需要使用布局管理器(也叫几何体管理器)来显示按钮的位置(使用管理器pack)
按钮也可以指定一些文本、给按钮添加行为

from tkinter import *
button = Button()
button.pack()
button['text'] = 'Click me!'
def clicked():print("I was clicked!")mainloop()

效果图如下:在这里插入图片描述

可以不分别给属性赋值,而使用方法config同时设置多个属性。
button.config(text='Click me!',command=clicked)
还可使用控件的构造函数来配置控件。
Button(text='click me too!',command=clicked).pack()

布局

对控件调用方法pack时,将把控件放在其父控件(主控件)中。

from tkinter import *
Label(text="I'm in the first window!").pack()
second = Toplevel()
Label(second,text="I'm in the second window!").pack()

效果图如下:在这里插入图片描述
Toplevel类表示除主窗口外的另一个顶级窗口,而Label就是文本标签。

一列按钮

from tkinter import *
for i in range(10):Button(text=i).pack()mainloop()

效果图如下:在这里插入图片描述
要快速了解可用的选项,可执行如下命令

help(Pack.config)
'''
Help on function pack_configure in module tkinter:pack_configure(self, cnf={}, **kw)Pack a widget in the parent widget. Use as options:after=widget - pack it after you have packed widgetanchor=NSEW (or subset) - position widget according togiven directionbefore=widget - pack it before you will pack widgetexpand=bool - expand widget if parent size growsfill=NONE or X or Y or BOTH - fill widget if widget growsin=master - use master to contain this widgetin_=master - see 'in' option descriptionipadx=amount - add internal padding in x directionipady=amount - add internal padding in y directionpadx=amount - add padding in x directionpady=amount - add padding in y directionside=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget.
'''

还有其他的布局管理器,具体地说是gridplace

help(Grid.configure)
'''
Help on function grid_configure in module tkinter:grid_configure(self, cnf={}, **kw)Position a widget in the parent widget in a grid. Use as options:column=number - use cell identified with given column (starting with 0)columnspan=number - this widget will span several columnsin=master - use master to contain this widgetin_=master - see 'in' option descriptionipadx=amount - add internal padding in x directionipady=amount - add internal padding in y directionpadx=amount - add padding in x directionpady=amount - add padding in y directionrow=number - use cell identified with given row (starting with 0)rowspan=number - this widget will span several rowssticky=NSEW - if cell is larger on which sides will thiswidget stick to the cell boundary
'''
help(Place.config)
'''
Help on function place_configure in module tkinter:place_configure(self, cnf={}, **kw)Place a widget in the parent widget. Use as options:in=master - master relative to which the widget is placedin_=master - see 'in' option descriptionx=amount - locate anchor of this widget at position x of mastery=amount - locate anchor of this widget at position y of masterrelx=amount - locate anchor of this widget between 0.0 and 1.0relative to width of master (1.0 is right edge)rely=amount - locate anchor of this widget between 0.0 and 1.0relative to height of master (1.0 is bottom edge)anchor=NSEW (or subset) - position anchor according to given directionwidth=amount - width of this widget in pixelheight=amount - height of this widget in pixelrelwidth=amount - width of this widget between 0.0 and 1.0relative to width of master (1.0 is the same widthas the master)relheight=amount - height of this widget between 0.0 and 1.0relative to height of master (1.0 is the sameheight as the master)bordermode="inside" or "outside" - whether to take border width ofmaster widget into account
'''

事件处理

通过设置属性command给按钮指定动作(action),这是一种特殊的事件处理。
Tkinter还提供了更通用的事件处理机制:方法bind。要让控件对特定的事件进行处理,可对其调用方法bind,并指定事件的名称和要使用的函数。

点哪儿显示所点击的坐标位置(鼠标单击事件,提供x和y坐标)
其中是使用鼠标左按钮(按钮1)单击的事件名称。
将这种事件关联到函数callback。
这样,每当用户在窗口top中单击时,都将调用这个函数。向函数callback传递一个event对象,这个对象包含的属性随事件类型而异。

from tkinter import *
top = Tk()
def callback(event):print(event.x,event.y)top.bind('<Button-1>',callback)#结果为:'2435082162376callback'
mainloop()

效果图如下:在这里插入图片描述
当然也可以查询帮助

help(Tk.bind)
'''
Help on function bind in module tkinter:bind(self, sequence=None, func=None, add=None)Bind to this widget at event SEQUENCE a call to function FUNC.SEQUENCE is a string of concatenated eventpatterns. An event pattern is of the form<MODIFIER-MODIFIER-TYPE-DETAIL> where MODIFIER is oneof Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4,Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3,B3, Alt, Button4, B4, Double, Button5, B5 Triple,Mod1, M1. TYPE is one of Activate, Enter, Map,ButtonPress, Button, Expose, Motion, ButtonReleaseFocusIn, MouseWheel, Circulate, FocusOut, Property,Colormap, Gravity Reparent, Configure, KeyPress, Key,Unmap, Deactivate, KeyRelease Visibility, Destroy,Leave and DETAIL is the button number for ButtonPress,ButtonRelease and DETAIL is the Keysym for KeyPress andKeyRelease. Examples are<Control-Button-1> for pressing Control and mouse button 1 or<Alt-A> for pressing A and the Alt key (KeyPress can be omitted).An event pattern can also be a virtual event of the form<<AString>> where AString can be arbitrary. Thisevent can be generated by event_generate.If events are concatenated they must appear shortlyafter each other.FUNC will be called if the event sequence occurs with aninstance of Event as argument. If the return value of FUNC is"break" no further bound function is invoked.An additional boolean parameter ADD specifies whether FUNC willbe called additionally to the other bound function or whetherit will replace the previous function.Bind will return an identifier to allow deletion of the bound function withunbind without memory leak.If FUNC or SEQUENCE is omitted the bound function or listof bound events are returned.
'''

最终的程序

简单的GUI文本编辑器
1,需要输入所要编辑的文本地址
2,点击Open,即可打开该文本文件
3,在下方编辑栏中可随意编辑
4,点击Save即可保存

from tkinter import *
from tkinter.scrolledtext import ScrolledText
def load():with open(filename.get()) as file:contents.delete('1.0', END)contents.insert(INSERT, file.read())def save():with open(filename.get(), 'w') as file:file.write(contents.get('1.0', END))top = Tk() 
top.title("Simple Editor")contents = ScrolledText() 
contents.pack(side=BOTTOM, expand=True, fill=BOTH)filename = Entry() 
filename.pack(side=LEFT, expand=True, fill=X)Button(text='Open', command=load).pack(side=LEFT) 
Button(text='Save', command=save).pack(side=LEFT)mainloop()

效果图如下:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

概念描述
图形用户界面(GUI)GUI有助于让应用程序对用户更友好。并非所有的程序都需要GUI,但只要程序需要与用户交互,GUI就可能很有帮助。
TkinterTkinter是一个跨平台的Python GUI工具包,成熟而且使用广泛。
布局通过指定组件的几何属性,很容易对其进行定位,但要确保它们在父窗口的大小发生变化时做出正确的反应,就必须使用布局管理器。
事件处理GUI工具包中用户触发事件执行的操作。要发挥作用,程序可能需要响应某些事件,否则用户将无法与之交互。在Tkinter中,要给组件添加事件处理程序,可使用方法bind。

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

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

相关文章

Sqlserver 2005 配置 数据库镜像:数据库镜像期间可能出现的故障:镜像超时机制

数据库镜像期间可能出现的故障 SQL Server 2005其他版本更新日期&#xff1a; 2006 年 7 月 17 日 物理故障、操作系统故障或 SQL Server 故障都可能导致数据库镜像会话失败。数据库镜像不会定期检查 Sqlservr.exe 所依赖的组件来验证组件是在正常运行还是已出现故障。但对于某…

【神经网络八股扩展】:自制数据集

课程来源&#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言1、文件一览2、将load_data()函数替换掉2、调用generateds函数4、效果总结前言 本讲目标:自制数据集&#xff0c;解决本领域应用 将我们手中的图片和标签信息制作为可以直接导入的npy文件。 1、文件一览 首先看…

c语言输出11258循环,c/c++内存机制(一)(转)

一&#xff1a;C语言中的内存机制在C语言中&#xff0c;内存主要分为如下5个存储区&#xff1a;(1)栈(Stack)&#xff1a;位于函数内的局部变量(包括函数实参)&#xff0c;由编译器负责分配释放&#xff0c;函数结束&#xff0c;栈变量失效。(2)堆(Heap)&#xff1a;由程序员用…

【神经网络八股扩展】:数据增强

课程来源&#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言TensorFlow2数据增强函数数据增强网络八股代码&#xff1a;总结前言 本讲目标:数据增强&#xff0c;增大数据量 关于我们为何要使用数据增强以及常用的几种数据增强的手法&#xff0c;可以看看下面的文章&#…

分享WCF聊天程序--WCFChat

无意中在一个国外的站点下到了一个利用WCF实现聊天的程序&#xff0c;作者是&#xff1a;Nikola Paljetak。研究了一下&#xff0c;自己做了测试和部分修改&#xff0c;感觉还不错&#xff0c;分享给大家。先来看下运行效果&#xff1a;开启服务&#xff1a;客户端程序&#xf…

【神经网络扩展】:断点续训和参数提取

课程来源&#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言断点续训主要步骤参数提取主要步骤总结前言 本讲目标:断点续训&#xff0c;存取最优模型&#xff1b;保存可训练参数至文本 断点续训主要步骤 读取模型&#xff1a; 先定义出存放模型的路径和文件名&#xff0…

小米手环6NFC安装太空人表盘

以前看我室友峰哥、班长都有手环&#xff0c;一直想买个手环&#xff0c;不舍得&#xff0c;然后今年除夕的时候降价&#xff0c;一狠心&#xff0c;入手了&#xff0c;配上除夕的打年兽活动还有看春晚京东敲鼓领的红包和这几年攒下来的京东豆豆&#xff0c;原价279的小米手环6…

为什么两层3*3卷积核效果比1层5*5卷积核效果要好?

目录1、感受野2、2层3 * 3卷积与1层5 * 5卷积3、2层3 * 3卷积与1层5 * 5卷积的计算量比较4、2层3 * 3卷积与1层5 * 5卷积的非线性比较5、2层3 * 3卷积与1层5 * 5卷积的参数量比较1、感受野 感受野&#xff1a;卷积神经网络各输出特征像素点&#xff0c;在原始图片映射区域大小。…

算法正确性和复杂度分析

算法正确性——循环不变式 算法复杂度的计算 方法一 代换法 —局部代换 这里直接对n变量进行代换 —替换成对数或者指数的情形 n 2^m —整体代换 这里直接对递推项进行代换 —替换成内部递推下标的形式 T(2^n) S(n) 方法二 递归树法 —用实例说明 —分析每一层的内容 —除了…

第十五章 Python和Web

第十五章 Python和Web 本章讨论Python Web编程的一些方面。 三个重要的主题&#xff1a;屏幕抓取、CGI和mod_python。 屏幕抓取 屏幕抓取是通过程序下载网页并从中提取信息的过程。 下载数据并对其进行分析。 从Python Job Board&#xff08;http://python.org/jobs&#x…

【数据结构基础笔记】【图】

代码参考《妙趣横生的算法.C语言实现》 文章目录前言1、图的概念2、图的存储形式1、邻接矩阵&#xff1a;2、邻接表3、代码定义邻接表3、图的创建4、深度优先搜索DFS5、广度优先搜索BFS6、实例分析前言 本章总结&#xff1a;图的概念、图的存储形式、邻接表定义、图的创建、图…

如何蹭网

引言蹭网&#xff0c;在普通人的眼里&#xff0c;是一种很高深的技术活&#xff0c;总觉得肯定很难&#xff0c;肯定很难搞。还没开始学&#xff0c;就已经败给了自己的心里&#xff0c;其实&#xff0c;蹭网太过于简单。我可以毫不夸张的说&#xff0c;只要你会windows的基本操…

android对象缓存,Android简单实现 缓存数据

前言1、每一种要缓存的数据都是有对应的versionCode&#xff0c;通过versionCode请求网络获取是否需要更新2、提前将要缓存的数据放入assets文件夹中&#xff0c;打包上线。缓存设计代码实现/*** Created by huangbo on 2017/6/19.** 主要是缓存的工具类** 缓存设计&#xff1a…

通信原理.绪论

今天刚上通信原理的第一节课&#xff0c;没有涉及过多的讲解&#xff0c;只是讲了下大概的知识框架。现记录如下&#xff1a; 目录1、基本概念消息、信息与信号2、通信系统模型1、信息源2、发送设备3、信道4、接收设备5、信宿6、模拟通信系统模型7、数字通信系统模型8、信源编…

css rgba透明_rgba()函数以及CSS中的示例

css rgba透明Introduction: 介绍&#xff1a; Functions are used regularly while we are developing a web page or website. Therefore, to be a good developer you need to master as many functions as you can. This way your coding knowledge will increase as well …

犀牛脚本:仿迅雷的增强批量下载

迅雷的批量下载满好用。但是有两点我不太中意。在这个脚本里会有所增强 1、不能设置保存的文件名。2、不能单独设置这批下载的线程限制。 使用方法 // 下载从编号001到编号020的图片&#xff0c;保存名为猫咪写真*.jpg 使用6个线程 jdlp http://bizhi.zhuoku.com/bizhi/200804/…

android 服务端 漏洞,安卓漏洞 CVE 2017-13287 复现详解-

2018年4月&#xff0c;Android安全公告公布了CVE-2017-13287漏洞。与同期披露的其他漏洞一起&#xff0c;同属于框架中Parcelable对象的写入(序列化)与读出(反序列化)的不一致所造成的漏洞。在刚看到谷歌对于漏洞给出的补丁时一头雾水&#xff0c;在这里要感谢heeeeenMS509Team…

GAP(全局平均池化层)操作

转载的文章链接&#xff1a; 为什么使用全局平均池化层&#xff1f; 关于 global average pooling https://blog.csdn.net/qq_23304241/article/details/80292859 在卷积神经网络的初期&#xff0c;卷积层通过池化层&#xff08;一般是 最大池化&#xff09;后总是要一个或n个全…

zoj1245 Triangles(DP)

/* 动态三角形&#xff1a;每次DP时考虑的是两个子三角形的高度即可 注意&#xff1a; 三角形可以是倒置的。 */ View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 #include <stdio.h> 5 6 using namespace std; 7 8…

android编程从零开始,从零开始学习android开发

博主最近开通了Android栏目&#xff0c;现在正在从零开始学习android&#xff0c;遇到的所有值得分享的知识点以及遇到的问题将发布在这个博客的android栏目下。因为我有着深厚的java底子&#xff0c;所以学习起来得心应手&#xff0c;十分的简单&#xff0c;当然也只能算是入门…