tkinter学习笔记

一、建立窗口

快速创建一个窗口的代码如下:

import tkinter
root=tkinter.TK() #创建一个根窗口,root是TK对象的名称(对象的名称是可以自定义的)
root.mainloop() #放在程序的最后一行,表示让根窗口进行事件循环,同时等待和处理窗口事件

1、常见的窗口属性:

title() :可以设置窗口的标题

configure(bg='color'):设置窗口的背景色

resizeable(True,True):设置是否允许用户更改窗口大小,第一个参数是宽,第二个参数是高。

minsize(width,height): 拖拽时可以设置窗口最小的宽和高。

iconbitmap("file_path.ico") :更改默认窗口图标。

geometry("widthxheight+x+y") #设置窗口宽width和高height。单位是像素,后面的x,y用于设定窗口的位置。

窗口的位置可以由微信截图信息pos,快速计算(ctrl+a)。具体操作如下:

具体代码:

2、tkinte2r 中的widget

tkinter的特性:tkinter会安排足够的控件显示控件。当我们创建好一个根窗口后,需要向根窗口中添加相应的部件,使得图形化界面更具可读性,widget可以翻译为控件或组件或部件。

具体来说:控件包括按钮、画布、文本框、标签、菜单等。

3、widget的共同属性

以下属性在widget中,作用相同。通俗来说就是只要你知道一下属性是怎么使用的,那么就

Dimensions:大小

colors:颜色

fonts:字形

Anchor:位置参考点

relief style:属性边框

bitmaps:显示位图

cursors:鼠标外形

4、widget的共同方法

进程相关的函数:

mainloop():让程序继续执行,同时进入等待与处理窗口事件。

quit(): Python shell 窗口结束,但是所建串口继续执行。

updata() :更新窗口画面。

回调函数:

bind(event,callback):事件绑定

unbind(event):解除绑定

after(time,callback):间隔指定时间调用callback()方法。

二、label标签

tkinter.Label()方法可以用于在窗口内建立文字或图像标签。基本语法如下:

tkinter.Lable(父对象,选项...)

Lable()方法的第一个参数是父对象,表示这个标签将建立在哪一个父对象(即当前标签在那个窗口对象中)。接下来将会详细介绍lable标签的属性:

label标签属性

1、text属性

标签内容,如果有‘\n’则可输入多行文字。

2、lable文字输出换行位置wraplength

wraplength这个参数可以设置标签中的文字在多少宽度后自动换行。

3、Lable的justify参数

在标签的输出中,如果是多行的输出,在最后一行的输出时可以使用justify参数设置所输出标签内容是left/center/right。(左,居中,右)

4、标签文字与标签区间的间距padx/pady

在设计标签或其他widget控件时,若不设置widget的大小,系统将使用最适合空间作为此widger的大小。也可以设置标签文字和标签区间的间距,达到更改标签区间的目的。padx可以设置标签文字左右边界与标签区间的x轴间距,pady可以设置标签文字上下边界与标签区间的y轴间距。(简而言之:就是控制标签内容与标签边界的距离)

5、分割线separator

在设计gui程序时,有时适度在适当位置添加分割线可以让整体效果视觉效果更佳。tkinter.ttk中有sepatator模块,可以用此模块完成此工作,语法格式为:

Separator(父对象,options)

Sepatator()方法的第一个参数是父对象,表示这个分割线将建立在哪一个对象内,options参数如果是HORIZONTAL则建立水平分割线,VERTICAL则建立垂直分割线。

具体实例:

from tkinter import *
from tkinter.ttk import Separator
​
root=Tk()
root.title("Separator learning")
label_text1="北京民办高校"
lable_text2="bcu"
lable1=Label(root,text=label_text1)
lable1.pack(padx=10,pady=10)
sep=Separator(root,orient=HORIZONTAL) #创建分割线对象
sep.pack(fill=X,padx=5)
lable2=Label(root,text=lable_text2)
lable2.pack(padx=10,pady=10)
root.mainloop()

组件的共有属性

1、组件的共有color属性:

fg设置前景色,相关于是标签的颜色;bg设置背景颜色。

2、组件的共有属性dimensions(大小/尺寸)

height可以设置widget控件的高度,单位是字符高度。width可以设置widget控件的宽度,单位是字符宽度。

3、widget的共同属性Anchor

anchor其实是指标签文字在标签区域输出位置的设置,在默认情况下,widget控件是上下与左右都居中对齐的。(tkinter中的N,S,W,E分别表示上下左右)

4、widget的共同属性Font

font参数用于设置文字字形,大小。

5、widget的共同属性Bitmaps

tkinter也提供了在标签位置放置内建位图的功能。

6、widget共有属性compound:

图像与文字共存时,可以使用此参数定义为与图形的位置关系。compound参数有:

left:图像在左

right:图像在右

top:图像在上

bottom:图像在下

7、widget的共同属性relief

relief属性可以应用在许多的widget控件上,可以利用relief属性建立widget控件的边框。

relief属性的取值为:flat,groove,raised,ridge,solid,sunken。

8、widget的共同属性photoimage

图片可以应用在许多地方,如标签、功能按钮、选项按钮、文字区域等。在使用前可以用photoimage()方法建立图像对象,然后再将此对象应用在其他窗口组件上。基本语法如下:

imageobj=PhotoImage(file="file_path") #注意图片的扩展名为gif或png

9、widget的共同方法config()

widget控件在建立时,可以直接设置对象属性,若是部分属性未建立,未来在程序执行时如果想建立或是更改属性可以使用config()方法。该方法内属性设置的参数用法与建立时相同。

from tkinter import *
counter=0
def run_counter(digit): #数字变量内容的更新def counting():  #数字变脸内容的更新global countercounter+=1digit.config(text=str(counter)) #列出数字内容digit.after(1000,counting) #没隔1秒钟,调用counting函数counting()
​
root=Tk()
root.title("config learning")
digit=Label(root,bg='yellow',fg='blue',  #创建一个标签并且设置为指定的格式height=3,width=10)
digit.pack() #将标签添加到根窗口中
run_counter(digit)
root.mainloop()

10、widget的共同属性cursors

cursors表示光标形状,程序设计时,如果想要更改光标形状,可以使用本功能。基本使用语法为:

cursor="光标对应的形状"

11、widget的共同方法keys()

组件中有一个共同方法keys()可以用列表传回这个组件的所有参数。

三、窗口控件配置管理员

前言:在实际开发过程中,我们需要向根窗口中添加多个widget组件,接下来,我们将会继续学习如何实现将多个组件添加到根窗口中。

基本知识了解:

在设计GUI程序时,可以使用方法(pack,grid,place)包装和定位各组件在容器或窗口内的位置,这种方法称为窗口控件配置管理员。

pack方法介绍及其参数

pack是tkinter中一个类别,这是最常使用的控件配置管理方法,它是使用相对位置的概念处理widget控件配置,至于控件的正确位置则是pack方法自动完成。pack方法的自动语法格式如下。

pack(options,....)

options参数可以是side,fill,padx/pady,ipadx/ipady,anchor。

1、side参数

side参数可以垂直或水平配置控件。

side参数的取值为:

top:这是默认值,由上往下排列。

BOTTOM:由下往上排列。

left:由左往右排列。

right:由右往左排列。

2、padx/pady参数

另外,在使用pack方法时,可以使用padx/pady参数设定控件边界与容器(组件所有在窗口)的距离或是控件边界间的距离。在默认环境下窗口控件间的距离是1像素,如果希望有适度间距,可以设置参数padx/pady,代表水平间距/垂直间距。

1

from tkinter import *
​
window=Tk() #创建根窗口
window.title("padx pady learning")
window.geometry("180x100+879+233")
lab1=Label(window,text='原野小路',bg='lightyellow') #设置标签背景是浅黄色
lab2=Label(window,text='心存她',bg='lightgreen') #标签背景是浅绿色
lab3=Label(window,text="秀姐",bg='lightblue')
lab1.pack(side=LEFT,padx=10) #将标签添加到根窗口中
lab2.pack(side=LEFT,padx=10)
lab3.pack(side=LEFT,padx=10)
window.mainloop()

运行结果:

3、ipadx/ipady参数

ipadx参数可以控制标签文字与标签容器x轴间距,ipady参数可以控制标签文字与标签容器的y轴间距。(简单来说就是控制内容与内容所在标签边界的间距)

具体实例:

from tkinter import *
window=Tk()
window.title("ipadx ipady learning")
lab1=Label(window,text="原野小路",bg="lightgreen")
lab2=Label(window,text="心存她",bg="lightyellow")
lab3=Label(window,text="秀姐",bg="lightblue")
lab1.pack() #将组件与窗口进行绑定
lab2.pack(ipadx=50)
lab3.pack()
window.mainloop()

4、anchor参数

这个参数可以设定组件在窗口中的位置,具体指的是控件内容在控件区域的位置设定。(通俗来说:就是组件在窗口中的显示位置),anchor参数的取值可以为:NW,N,NE....具体的效果就是如下所示。

具体实例:

from tkinter import *
root=Tk()
root.title("anchor learning")
root.geometry("300x200")
name=Label(root,text="原野小路",fg='white',bg='blue')
name.pack(anchor=S,side=RIGHT,padx=10,pady=10)
mainloop()

5、fill参数、expand参数

fill参数的主要功能是告诉pack管理程序,设置控件填满所分配容器区间的方式,如果是fill=X表示控件可以填满所分配空间的x不留空白;如果fill=Y表示控件可以填满所分配空间的y轴不留白;如果fill=BOTH表示控件可以填满所分配空间的x轴和y轴。

注意事项:如果所分配容器区间已经满了,则使用fill参数将不会有任何作用。

expand参数可设定widget组件是否填满额外的父容器空间,默认是False(或0),表示不填满。如果是True(或是1)表示填满。

具体实例:

from tkinter import *
​
root=Tk()
root.title("fill learning")
lab1=Label(root,text="原野小路",bg="lightyellow")
lab2=Label(root,text="心存",bg='lightgreen')
lab3=Label(root,text="秀姐",bg='lightblue')
lab1.pack(side=LEFT,fill=Y)
lab2.pack(fill=X)
lab3.pack(fill=BOTH,expand=True)
root.mainloop()
​
#当我们拖拽改变窗口的大小时,发现标签3的填充并没有完全的进行填充,
# 这是因为当组件从左到右配置时,pack配置管理员所配置的控件是
# Y轴空间。当组件从上到小配置时,pack配置管理员所配置的控件是
# X轴的控件。“秀姐”标签在Y轴的空间称为额外空间。这时需要借助expand参数。

6、forget参数

隐藏widget控件,可以使用pack()方法复原显示。

四、功能按钮Button

功能按钮也可称为按钮,在窗口组件中可以设计单击功能按钮时,执行某一个特定的工作,这个动作称为cllback方法,也就是说可以将功能按钮当作用户与程序间沟通的桥梁。

功能按钮上可以有文字,或是和标签一样有图像。

它的语法格式如下:

Button(父对象,options)

Button()方法的第一个参数是父对象,表示这个功能按钮将建立在哪一个窗口内。

1、Button按钮汇中的options参数:

boderwidth或bd:边界宽度默认是两个像素。

bg或background:北京色彩。

command:点击功能按钮时,执行此方法

cursor:当鼠标光标制动至按钮上是的状态

fg或foreground:前景色彩。

font:字形。

height:高,单位是字符高。

highlightbackground:当功能按钮取得聚焦时的背景色。

highlightcolor:当功能按钮取得焦点时的颜色。

image:功能钮上的图像。

justify:当有多行文字时,最后一行文字的对齐方式。

padx:默认是1,可设置功能按钮与文字的间隔。

pady:默认是1,可设置功能按钮的上下间距。

text:功能按钮名称

具体实例:切换背景颜色

from tkinter import *
def yellow():"""设置窗口背景是黄色"""root.config(bg="yellow")
​
def blue():"""设置窗口背景是蓝色"""root.config(bg='blue')
​
​
root=Tk()
root.title("背景切换")
root.geometry("300x320+766+160")
exitbtn=Button(root,text="exit",command=root.destroy)
bluebtn=Button(root,text='blue',command=blue)
yellowbtn=Button(root,text='yellow',cursor='icon',command=yellow)
#将三个按钮包装定位到根窗口的右下角
exitbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
bluebtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
yellowbtn.pack(anchor=S,side=RIGHT,padx=2,pady=5)
root.mainloop()

2、使用Lambda表达式

在刚刚举出的实例中,发现yellow和blue按钮执行相同的工作,但是传递的颜色参数不同,所以这是使用lambda表达式的好时机。我们可以通过lambda表达式调用相同的方法,传递不同的参数简化设计。

具体实例:

from tkinter import *
def bcolor(bgcolor):#设置窗口背景颜色root.config(bg=bgcolor)
​
root=Tk()
root.title("lambda learning")
root.geometry("300x200")
​
#依次建立三个按钮
exitbtn=Button(root,text='exit',command=root.destroy)
bluebtn=Button(root,text='blue',command=lambda:bcolor("blue"))
yellowbtn=Button(root,text='yellow',command=lambda:bcolor('yellow'))
#将三个按钮包装定位在右下方
exitbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
bluebtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
yellowbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
root.mainloop()

3、建立含图像的功能按钮

一般功能按钮是用文字当作按钮名称,但是也可以用图像作为按钮名称。若是使用图像当作按钮,在button()内可以省略text参数设置按钮名称,但是在button()内要增加image参数设置图像对象。

实例代码:

from tkinter import *
def msgShow():label.config(text="心存",bg='lightyellow',fg='blue')
root=Tk()
root.title("建立包含图像的功能按钮")  #设置窗口标题
lable=Lable(root) #创建标签对象
img_obj=PhotoImage(file="sun.fig") #创建img对象
btn=Button(root,image=img_obj,command=msgShow) #成功创建了含有图像的按钮
lable.pack() 
btn.pack()
root.mainloop()

五、文本框Entry及其相关属性

文本框是指单行的文本框,在gui程序设计中这是用于输入的最基本的组件,我们可以使用它输入单行字符串。如果输入的字符串长度大于文本框的宽度,输入的文字会自动隐藏造成部分内容无法显示。(但是可以使用箭头键移动鼠标光标到看不到的区域。)

它的使用格式为:

Entry(父对象,options,...)

Entry()方法的第一个参数是父对象,表示这个文本框将建立在哪一个窗口中。

1、使用show参数隐藏输入的字符

其实Entry控件具有可以使用show参数设置隐藏输入字符的特性,所以也常被应用于密码的输入控制。

2、Entry的get()方法

Entry有一个get()方法,可以利用这个方法获目前Entry的字符串内容。组件有一个常用方法Quit,执行此方法Python shell窗口的程序将结束,但是此窗口应用程序继续运行。

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

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

相关文章

「云渲染课堂」3dmax地砖材质参数怎么让画面更加真实?

在3DMAX中,地砖材质的渲染需要细致的调整,因为不同材质的地砖在反射和折射参数上各不相同。为了使地砖材质更加逼真,以下简要说明了一些设置方法,希望对大家有所帮助! 3dmax地砖材质参数如何设置 1、打开材质编辑器&a…

汇编:数据类型

基本数据类型 1.字节(Byte): 大小:8位(1字节) 表示范围:0到255(无符号),-128到127(有符号) 汇编定义:DB(Def…

性能测试--线程的监控

1.线程的状态 1.1.线程的5种状态 java的线程总共有5种状态,如下: * 新建:new 【新建之后不启用都是new】* 运行:runnable* 等待:waitting(无限期等待),timed waitting(限期等待)* 阻塞:blocked* 结束&am…

LaTex 模板 - 东北师范大学申研申博推荐信

文章目录 NENU-Letter-Template项目地址示例特性项目结构如何使用main.texletterContent.tex 如何编译方式 1 :在线编译方式 2 :本地编译 参考 NENU-Letter-Template NENU’s recommendation letter template. 东北师范大学推荐信模板 项目地址 GitHu…

构建响应式网站的HTML5和CSS3最新技术

构建响应式网站需要利用HTML5和CSS3的最新技术&#xff0c;以确保网站在各种设备和屏幕尺寸上都能提供良好的用户体验。以下是一些关键技术和技巧&#xff1a; HTML5 技术 语义化标签&#xff1a; 使用语义化标签如 <header>、<nav>、<section>、<articl…

网络爬虫原理及其应用

你是否想知道Google 和 Bing 等搜索引擎如何收集搜索结果中显示的所有数据。这是因为搜索引擎对其档案中的所有页面建立索引&#xff0c;以便它们可以根据查询返回最相关的结果。网络爬虫使搜索引擎能够处理这个过程。 本文重点介绍了网络爬虫的重要方面、网络爬虫为何重要、其…

【学习笔记】Webpack5(Ⅱ)

Webpack 3、高级篇 3.1、提升开发体验 —— SourceMap 3.2、提升打包速度 3.2.1 HotModuleReplacement 3.2.2 OneOf 3.2.3 Include / Exclude 3.2.4 Cache 3.2.5 Thread 3.3、减少代码体积 …

小苯的01背包easy(枚举,位运算,思维推导)

文章目录 题目描述输入格式输出格式样例输入1样例输出1样例输入2样例输出2提交链接提示 解析参考代码 题目描述 小苯有一个容量为 k k k 的背包&#xff0c;现在有 n n n 个物品&#xff0c;每个物品有一个体积 v v v 和价值 w w w&#xff0c;他想知道在体积不超过 k k …

ACM实训冲刺第十八天

统计元音 代码 需要注意的是getchar()和gets(s) #include<stdio.h> #include<string.h> int main(){//测试实例个数int n;scanf("%d",&n) ;char s[100];getchar();while(n--){gets(s);int cnta0,cnte0,cnti0,cnto0,cntu0;for(int j0;j<strlen(…

蓝桥杯杨辉三角

PREV-282 杨辉三角形【第十二届】【蓝桥杯省赛】【B组】 &#xff08;二分查找 递推&#xff09;&#xff1a; 解析&#xff1a; 1.杨辉三角具有对称性&#xff1a; 2.杨辉三角具有一定规律 通过观察发现&#xff0c;第一次出现的地方一定在左部靠右的位置&#xff0c;所以从…

Math对象是什么?有什么用?

Math对象是JavaScript的一个内置对象&#xff0c;包含了一些常用的数学方法和属性。它提供了一些数学运算的函数&#xff0c;可以通过调用这些函数来执行各种数学计算。 Math对象的一些常用方法包括&#xff1a; 1. Math.abs(x)&#xff1a;返回一个数的绝对值。 2. Math.ceil…

浅析OceanBase数据库:特点、优势与应用场景

随着数据量的不断增长和业务需求的不断变化&#xff0c;数据库技术在现代信息系统中的地位变得越来越重要。蚂蚁集团推出的OceanBase数据库&#xff0c;凭借其高性能、高可用性和高扩展性&#xff0c;成为了业内备受关注的明星产品。本文将从技术角度&#xff0c;浅浅的解析Oce…

FTP协议——BFTPD安装(Linux)

1、简介 BFTPD&#xff0c;全称为 Brutal File Transfer Protocol Daemon&#xff0c;是一个用于Unix和类Unix系统的轻量级FTP服务器软件。它的设计理念是提供一个简单、快速、安全的FTP服务器解决方案&#xff0c;特别适用于需要低资源占用的环境。 2、步骤 环境&#xff1…

C语言基础-如何避免内存泄漏

在C语言中&#xff0c;内存泄漏是一个常见且严重的问题&#xff0c;因为它可能导致程序消耗过多的内存资源&#xff0c;最终耗尽系统资源&#xff0c;导致程序崩溃或系统变得不稳定。为了避免内存泄漏&#xff0c;程序员需要仔细管理分配的内存&#xff0c;并确保在适当的时候释…

使用Golang调用腾讯云对象存储(COS)

文章目录 一、腾讯云COS对象存储创建1.1 创建存储桶2.1 存储桶测试 二、使用Golang调用腾讯云对象存储&#xff08;COS&#xff09;2.1 安装COS SDK2.2 初始化COS客户端2.3 上传文件2.4 下载文件2.5 列出存储桶中的对象2.6 整体代码示例 本文档介绍如何使用Golang调用腾讯云对象…

正在直播:Microsoft Copilot Studio 新增支持Copilot代理、Copilot扩展等多项功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

java连接ldap实现查询

文章目录 一、项目背景二、准备工作三、验证结果四、易错点讲解易错点1&#xff1a;java: 无法访问org.springframework.ldap.core.LdapTemplate易错点2&#xff1a;java: 无法访问org.springframework.context.ConfigurableApplicationContext易错点3&#xff1a;[LDAP: error…

思科、华为、华三、Juniper路由协议优先级汇总

Part1思科路由协议管理距离默认值 路由来源默认值已连接的接口0静态路由1增强型内部网关路由协议 (EIGRP) 汇总路由5外部边界网关协议 (BGP)20内部 EIGRP90IGRP100OSPF110IS-IS&#xff08;中间系统到中间系统&#xff09;115路由信息协议 (RIP)120Exterior Gateway Protocol …

Python——字典数据存入excel

# 字典结果写入excel表保存 df pd.DataFrame(my_dict) # dict转DataFrame result_excel df.T # 转置 print(result_excel) result_excel.to_excel(save_path) # 写入excel

C++:STL—算法

C:STL—算法 算法 算法 STL&#xff08;Standard Template Library&#xff09;中的算法是为了操作数据集合&#xff08;如容器&#xff09;而设计的函数模板集合&#xff0c;它们提供了丰富的功能和灵活的接口&#xff0c;可以用于对数据进行排序、查找、遍历等操作。STL中的…