第十二章 图形用户界面

第十二章 图形用户界面

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 所依赖的组件来验证组件是在正常运行还是已出现故障。但对于某…

江西理工大学期末试卷c语言,2016年江西理工大学信息工程学院计算机应用技术(加试)之C语言程序设计复试笔试最后押题五套卷...

一、选择题1&#xff0e; 设有函数定义&#xff1a;( )。A. B. C. D. 答:A则以下对函数sub 的调用语句中&#xff0c;正确的是【解析】函数的参数有两个&#xff0c;第一个是整型&#xff0c;第二个是字符类型&#xff0c;在调用函数时&#xff0c;实参必须一个是整型&#xff…

第十三章 数据库支持

第十三章 数据库支持 本章讨论Python数据库API&#xff08;一种连接到SQL数据库的标准化方式&#xff09;&#xff0c;并演示如何使用这个API来执行一些基本的SQL。最后&#xff0c;本章将讨论其他一些数据库技术。 关Python支持的数据库清单 Python数据库API 标准数据库API…

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

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

java 批量处理 示例_Java中异常处理的示例

java 批量处理 示例Here, we will analyse some exception handling codes, to better understand the concepts. 在这里&#xff0c;我们将分析一些异常处理代码 &#xff0c;以更好地理解这些概念。 Try to find the errors in the following code, if any 尝试在以下代码中…

hdu 1465 不容易系列之一

http://acm.hdu.edu.cn/showproblem.php?pid1465 今天立神和我们讲了错排&#xff0c;才知道错排原来很简单&#xff0c;从第n个推起&#xff1a; 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置…

第十四章 网络编程

第十四章 网络编程 本章首先概述Python标准库中的一些网络模块。然后讨论SocketServer和相关的类&#xff0c;并介绍同时处理多个连接的各种方法。最后&#xff0c;简单地说一说Twisted&#xff0c;这是一个使用Python编写网络程序的框架&#xff0c;功能丰富而成熟。 几个网…

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;可以看看下面的文章&#…

C++:从C继承的标准库

C从C继承了的标准库 &#xff0c; 这就意味着 C 中 可以使用的标准库函数 在C 中都可以使用 &#xff0c; 但是需要注意的是 &#xff0c; 这些标准库函数在C中不再以 <xxx.h> 命名 &#xff0c; 而是变成了 <cxxx> 。 例如 &#xff1a; 在C中操作字符串的…

分享WCF聊天程序--WCFChat

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

c# uri.host_C#| 具有示例的Uri.Equality()运算符

c# uri.hostUri.Equality()运算符 (Uri.Equality() Operator) Uri.Equality() Operator is overloaded which is used to compare two Uri objects. It returns true if two Uri objects contain the same Uri otherwise it returns false. Uri.Equality()运算符已重载&#xf…

第六章至第九章的单元测试

1,‌助剂与纤维作用力大于纤维分子之间的作用力,则该助剂最好用作() 纤维增塑膨化剂。 2,助剂扩散速率快,优先占领纤维上的染座,但助剂与纤维之间作用力小于染料与纤维之间作用力,该助剂可以作为() 匀染剂。 3,助剂占领纤维上的染座,但助剂与纤维之间作用力大于染…

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

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

开发DBA(APPLICATION DBA)的重要性

开发DBA是干什么的&#xff1f; 1. 审核开发人员写的SQL&#xff0c;并且纠正存在性能问题的SQL ---非常重要 2. 编写复杂业务逻辑SQL&#xff0c;因为复杂业务逻辑SQL开发人员写出的SQL基本上都是有性能问题的&#xff0c;与其让开发人员写&#xff0c;不如DBA自己写。---非常…

javascript和var之间的区别?

You can define your variables in JavaScript using two keywords - the let keyword and the var keyword. The var keyword is the oldest way of defining and declaring variables in JavaScript whereas the let is fairly new and was introduced by ES15. 您可以使用两…

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

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

计算机二级c语言题库缩印,计算机二级C语言上机题库(可缩印做考试小抄资料)...

小抄,答案,形成性考核册,形成性考核册答案,参考答案,小抄资料,考试资料,考试笔记第一套1.程序填空程序通过定义学生结构体数组&#xff0c;存储了若干个学生的学号、姓名和三门课的成绩。函数fun 的功能是将存放学生数据的结构体数组&#xff0c;按照姓名的字典序(从小到大排序…

为什么两层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) 方法二 递归树法 —用实例说明 —分析每一层的内容 —除了…