当前位置: 首页 > news >正文

班级响应式网站html格式怎么看是哪家做的网站

班级响应式网站html格式,怎么看是哪家做的网站,广州网络营销推广培训,京东的网站建设历史Tkinter 简介 Tkinter#xff08;即 tk interface#xff0c;简称“Tk”#xff09;本质上是对 Tcl/Tk 软件包的 Python 接口封装#xff0c;它是 Python 官方推荐的 GUI 工具包#xff0c;属于 Python 自带的标准库模块#xff0c;当您安装好 Python 后#xff0c;就可…Tkinter 简介 Tkinter即 tk interface简称“Tk”本质上是对 Tcl/Tk 软件包的 Python 接口封装它是 Python 官方推荐的 GUI 工具包属于 Python 自带的标准库模块当您安装好 Python 后就可以直接使用它而无须另行安装。 作为一款 Python GUI 工具Tkinter 拥有良好的跨平台性支持 Windows、Linux、Mac 平台它传承了 Python 语法简洁、代码易读的基本特点。 与其他编程语言的 GUI 工具包相比Tkinter 编码效率高能够实现快速开发的目的非常适合初学者学习。Tkinter 使用纯 Python 语言开发与 C/C 开发的 Qt 框架相比Tkinter 有自身的局限性比如性能、功能丰富程度等都不及 Qt因此它只适合开发一些简单的程序比如计算器的界面或者一个简易的聊天窗口等。 Tkinter 快速入门 Tkinter 程序至少应包含以下四个部分 导入 tkinter 模块创建主窗口也称 root 窗口即根窗口添加人机交互控件同时编写相应的事件函数通过主循环mainloop来显示主窗口 # 第一章节Tkinter 快速入门 import tkinter# 调用Tk()创建主窗口 root_window tkinter.Tk() # 给主窗口起一个名字也就是窗口的名字 root_window.title(Tkinter 快速入门) # 开启主循环让窗口处于显示状态 root_window.mainloop()上述代码创建了一个没有添加任何交互控件的 Tkinter 程序它也是最简单的 GUI 程序。这里的主窗口相当于画板其他的控件都要建立在主窗口之上。主循环也称“消息循环”或“事件循环”其主要作用是让主窗口处于显示状态。 下面通过Tkinter实现简单登入页面代码如下所示 # 第二章节Tkinter 实现简单登入页面 import tkinterimport tkinter import tkinter.messagebox# 创建应用程序窗口 root tkinter.Tk() varName tkinter.StringVar() varName.set() varPwd tkinter.StringVar() varPwd.set() # 创建标签 labelName tkinter.Label(root, text用户名:, justifytkinter.RIGHT, width80) # 将标签放到窗口上 labelName.place(x10, y5, width80, height20) # 创建文本框同时设置关联的变量 entryName tkinter.Entry(root, width80, textvariablevarName) entryName.place(x100, y5, width80, height20)labelPwd tkinter.Label(root, text密 码:, justifytkinter.RIGHT, width80) labelPwd.place(x10, y30, width80, height20) # 创建密码文本框 entryPwd tkinter.Entry(root, show*, width80, textvariablevarPwd) entryPwd.place(x100, y30, width80, height20)# 登录按钮事件处理函数 def login():# 获取用户名和密码name entryName.get()pwd entryPwd.get()if name admin and pwd 123456:tkinter.messagebox.showinfo(titlePython tkinter, message登录成功)else:tkinter.messagebox.showerror(titlePython tkinter, message登录失败)# 创建按钮组件同时设置按钮事件处理函数 buttonOk tkinter.Button(root, text登录, commandlogin) buttonOk.place(x30, y70, width50, height20)# 取消按钮的事件处理函数 def cancel():# 清空用户输入的用户名和密码varName.set()varPwd.set()buttonCancel tkinter.Button(root, text取消, commandcancel) buttonCancel.place(x90, y70, width50, height20)# 启动消息循环 root.mainloop()效果截图 下面对登入页面进行简单分析 1) 主窗口设置 主要对主窗口进行实例化 # 创建应用程序窗口 root tkinter.Tk() 2) 添加标签控件和文本输入框 上述程序中我们添加二个标签控件和二个文本输入框。需要注意的是当成功创建标签文本对象后使用 place 方法将其放置在主窗口内place 方法又称绝对/相对布局管理器。 # 创建标签 labelName tkinter.Label(root, text用户名:, justifytkinter.RIGHT, width80) # 将标签放到窗口上 labelName.place(x10, y5, width80, height20) # 创建文本框同时设置关联的变量 entryName tkinter.Entry(root, width80, textvariablevarName) entryName.place(x100, y5, width80, height20)labelPwd tkinter.Label(root, text密 码:, justifytkinter.RIGHT, width80) labelPwd.place(x10, y30, width80, height20) # 创建密码文本框 entryPwd tkinter.Entry(root, show*, width80, textvariablevarPwd) entryPwd.place(x100, y30, width80, height20) 3) 添加按钮 添加按钮的逻辑和添加文本标签类似值得注意的是按钮控件通过command参数实现了登入/取消功能。 # 登录按钮事件处理函数 def login():# 获取用户名和密码name entryName.get()pwd entryPwd.get()if name admin and pwd 123456:tkinter.messagebox.showinfo(titlePython tkinter, message登录成功)else:tkinter.messagebox.showerror(titlePython tkinter, message登录失败)# 创建按钮组件同时设置按钮事件处理函数 buttonOk tkinter.Button(root, text登录, commandlogin) buttonOk.place(x30, y70, width50, height20)# 取消按钮的事件处理函数 def cancel():# 清空用户输入的用户名和密码varName.set()varPwd.set()buttonCancel tkinter.Button(root, text取消, commandcancel) buttonCancel.place(x90, y70, width50, height20)Tkinter常用控件和属性 Tkinter 的提供各种控件如按钮标签和文本框一个 GUI 应用程序中使用。这些控件通常被称为控件或者部件。 Tkinter控件 目前有 15 种 Tkinter 的部件。我们提出这些部件以及一个简短的介绍在下面的表: 控件描述Button按钮控件在程序中显示按钮。Canvas画布控件显示图形元素如线条或文本Checkbutton多选框控件用于在程序中提供多项选择框Entry输入控件用于显示简单的文本内容Frame框架控件在屏幕上显示一个矩形区域多用来作为容器Label标签控件可以显示文本和位图Listbox列表框控件在Listbox窗口小部件是用来显示一个字符串列表给用户Menubutton菜单按钮控件由于显示菜单项。Menu菜单控件显示菜单栏,下拉菜单和弹出菜单Message消息控件用来显示多行文本与label比较类似Radiobutton单选按钮控件显示一个单选的按钮状态Scale范围控件显示一个数值刻度为输出限定范围的数字区间Scrollbar滚动条控件当内容超过可视化区域时使用如列表框。.Text文本控件用于显示多行文本Toplevel容器控件用来提供一个单独的对话框和Frame比较类似Spinbox输入控件与Entry类似但是可以指定输入范围值PanedWindowPanedWindow是一个窗口布局管理的插件可以包含一个或者多个子控件。LabelFramelabelframe 是一个简单的容器控件。常用与复杂的窗口布局。tkMessageBox用于显示你应用程序的消息框。 控件通用基本属性 在 Tkinter 中不同的控件受到各自参数的约束即参数所有控件既有相同属性也有各自独有的属性。我们先对这些控件的共用属性做简单介绍如下表所示 属性名称说明anchor定义控件或者文字信息在窗口内的位置bgbg 是 background 的缩写用来定义控件的背景颜色参数值可以颜色的十六进制数或者颜色英文单词bitmap定义显示在控件内的位图文件borderwidth定于控件的边框宽度单位是像素command该参数用于执行事件函数比如单击按钮时执行特定的动作可将执行用户自定义的函数cursor当鼠标指针移动到控件上时定义鼠标指针的类型字符换格式参数值有 crosshair十字光标watch待加载圆圈plus加号arrow箭头等font若控件支持设置标题文字就可以使用此属性来定义它是一个数组格式的参数 (字体,大小字体样式)fgfg 是 foreground 的缩写用来定义控件的前景色也就是字体的颜色height该参数值用来设置控件的高度文本控件以字符的数目为高度px其他控件则以像素为单位image定义显示在控件内的图片文件justify定义多行文字的排列方式此属性可以是 LEFT/CENTER/RIGHTpadx/pady定义控件内的文字或者图片与控件边框之间的水平/垂直距离relief定义控件的边框样式参数值为FLAT平的/RAISED凸起的/SUNKEN凹陷的/GROOVE沟槽桩边缘/RIDGE脊状边缘text定义控件的标题文字state控制控件是否处于可用状态参数值默认为 NORMAL/DISABLED默认为 NORMAL正常的width用于设置控件的宽度使用方法与 height 相同 Tkinter主窗口  主窗口是一切控件的基础所有的控件的都需要通过主窗口来显示。 创建一个空白窗口 # 第三章节Tkinter 创建空白页面 from tkinter import *# 创建一个主窗口对象 window Tk() # 调用mainloop()显示主窗口 window.mainloop() 窗口常用方法 下表列出了窗口的常用方法其中 window 代表主窗口对象 函数说明window.title(my title)接受一个字符串参数为窗口起一个标题window.resizable()是否允许用户拉伸主窗口大小默认为可更改当设置为 resizable(0,0)或者resizable(False,False)时不可更改window.geometry()设定主窗口的大小以及位置当参数值为 None 时表示获取窗口的大小和位置信息。window.quit()关闭当前窗口window.update()刷新当前窗口window.mainloop()设置窗口主循环使窗口循环显示一直显示指导窗口被关闭window.iconbitmap()设置窗口左上角的图标图标是.ico文件类型window.config(background red)设置窗口的背景色为红色也可以接受 16 进制的颜色值window.minsize(50,50)设置窗口被允许调整的最小范围即宽和高各50window.maxsize(400,400)设置窗口被允许调整的最大范围即宽和高各400window.attributes(-alpha,0.5)用来设置窗口的一些属性比如透明度-alpha、是否置顶-topmost即将主屏置于其他图标之上、是否全屏-fullscreen全屏显示等window.state(normal)用来设置窗口的显示状态参数值 normal正常显示icon最小化zoomed最大化window.withdraw()用来隐藏主窗口但不会销毁窗口。window.iconify()设置窗口最小化window.deiconify()将窗口从隐藏状态还原window.winfo_screenwidth() window.winfo_screenheight()获取电脑屏幕的分辨率尺寸window.winfo_width() window.winfo_height() 获取窗口的大小同样也适用于其他控件但是使用前需要使用 window.update() 刷新屏幕否则返回值为1window.protocol(协议名,回调函数)启用协议处理机制常用协议有 WN_DELETE_WINDOW当用户点击关闭窗口时窗口不会关闭而是触发回调函数。 # 第四章节Tkinter 主窗口相关函数 from tkinter import *window Tk() # 设置窗口title window.title(Tkinter 快速入门) # 设置窗口大小:宽x高,注,此处不能为 *,必须使用 x window.geometry(450x300) # 获取电脑屏幕的大小 print(电脑的分辨率是%dx%d%(window.winfo_screenwidth(), window.winfo_screenheight())) # 要求窗口的大小必须先刷新一下屏幕 window.update() print(窗口的分辨率是%dx%d%(window.winfo_width(), window.winfo_height())) # 如使用该函数则窗口不能被拉伸 # window.resizable(0,0) # 改变背景颜色 window.config(background#6fb765) # 设置窗口处于顶层 window.attributes(-topmost, True) # 设置窗口的透明度 window.attributes(-alpha,1) # 设置窗口被允许最大调整的范围与resizble()冲突 window.maxsize(600, 600) # 设置窗口被允许最小调整的范围与resizble()冲突 window.minsize(50, 50) # 更改左上角窗口的的icon图标,加载C语言中文网logo标 window.iconbitmap(img/1.png)# 进入主循环显示主窗口 window.mainloop()设置主窗位置 实际情况中窗口的位置在电脑屏幕的居中位置我们应该如何处理呢其实很简单通过窗口对象的 geometry() 方法即可改变主窗口的位置其语法格式如下 geometry(450x400300200) 上述代码表示设置主窗口的宽度为 450高度为 400同时窗口距离左边屏幕的距离为 300以像素为单位距离屏幕顶部的距离为 200这里我们将带“”的参数值称为“位置参数”当然您也可以将它们设置为负数如下所示 geometry(-1500-2000) 当设置了一个超过屏幕的负参数值时主窗口会被移动至“屏幕之外”此时就看不到主窗口了这也是隐藏窗口的一种方法。 # 第五章节Tkinter 主窗口屏幕居中显示 import tkinter as tkwindow tk.Tk() # 设置窗口大小变量 width 300 height 300 # 窗口居中获取屏幕尺寸以计算布局参数使窗口居屏幕中央 screenwidth window.winfo_screenwidth() screenheight window.winfo_screenheight() size_geo %dx%d%d%d % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) window.geometry(size_geo) window.mainloop()Tkinter 控件使用指南 Tkinter Label标签控件 Label标签控件是 Tkinter 中最常使用的一种控件主要用来显示窗口中的文本或者图像并且不同的 Lable标签允许设置各自不同的背景图片。 下面对 Label标签的常用属性做简单介绍   属性名称说明anchor控制文本或图像在 Label 中显示的位置方位通过方位的英文字符串缩写n、ne、e、se、s、sw、w、nw、center实现定位默认为居中centerbg用来设置背景色bd即 borderwidth 用来指定 Label 控件的边框宽度单位为像素默认为 2 个像素bitmap指定显示在 Label 控件上的位图若指定了 image 参数则该参数会被忽略compound控制 Lable 中文本和图像的混合模式若选项设置为 CENTER则文本显示在图像上如果将选项设置为 BOTTOM、LEFT、RIGHT、TOP则图像显示在文本旁边。cursor指定当鼠标在 Label 上掠过的时候鼠标的的显示样式参数值为 arrow、circle、cross、plusdisableforeground指定当 Label 设置为不可用状态的时候前景色的颜色font指定 Lable 中文本的 (字体,大小,样式元组参数格式一个 Lable 只能设置一种字体fg设置 Label 的前景色height/width设置 Lable 的高度/宽度如果 Lable 显示的是文本那么单位是文本单元如果 Label 显示的是图像那么单位就是像素如果不设置Label 会自动根据内容来计算出标签的高度highlightbackground当 Label 没有获得焦点的时候高亮边框的颜色系统的默认是标准背景色highlightcolor指定当 Lable 获得焦点的话时候高亮边框的颜色系统默认为0不带高亮边框image指定 Label 显示的图片一般是 PhotoImage、BitmapImage 的对象justify表示多行文本的对齐方式参数值为 left、right、center注意文本的位置取决于 anchor 选项padx/padypadx 指定 Label 水平方向上的间距即内容和边框间pady 指定 Lable 水平方向上的间距内容和边框间的距离relief指定边框样式默认值是 flat其他参数值有 groove、raised、ridge、solid或者sunkenstate该参数用来指定 Lable 的状态默认值为normal正常状态其他可选参数值有active和disabledtakefocus默认值为False如果是 True表示该标签接受输入焦点text用来指定 Lable 显示的文本注意文本内可以包含换行符underline给指定的字符添加下划线默认值为 -1 表示不添加当设置为 1 时表示给第二个文本字符添加下划线。wraplength将 Label 显示的文本分行该参数指定了分行后每一行的长度默认值为 0 Label控件构成 一个控件主要由背景和前景两部分组成。其中背景由三部分构成分别是内容区域、填充区、边框这三个区域的大小通过以下属性进行控制如下所示 width/heightpadx/padyborderwidth 下面通过一个示意图对 Label 背景的区域构成进行说明   图1Label控件组成 边框的宽度可以通过 borderwidth 来调整其样式可以通过relief来设置默认为平的 flat填充区的大小调整分为水平方向和垂直方向可以使用padx和pady来调整内容区则主要用来显示文字或者图片其大小由 width/height 来控制。 # 第六章节Tkinter Label标签 import tkinter as tkwindow tk.Tk() # 设置窗口大小变量 width 300 height 300 # 窗口居中获取屏幕尺寸以计算布局参数使窗口居屏幕中央 screenwidth window.winfo_screenwidth() screenheight window.winfo_screenheight() size_geo %dx%d%d%d % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) window.geometry(size_geo)# 若内容是文字则以字符为单位图像则以像素为单位 label tk.Label(window, textTkinter Label标签, bgred,# 设置标签内容区大小width30, height5,# 设置填充区距离、边框宽度和其样式凹陷式padx10, pady15, borderwidth10, reliefsunken) label.pack() window.mainloop() # 第六章节Tkinter Label标签label 设置背景图片 import tkinter as tkwindow tk.Tk() # 设置窗口大小变量 width 300 height 300 # 窗口居中获取屏幕尺寸以计算布局参数使窗口居屏幕中央 screenwidth window.winfo_screenwidth() screenheight window.winfo_screenheight() size_geo %dx%d%d%d % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) window.geometry(size_geo)# 若内容是文字则以字符为单位图像则以像素为单位 label tk.Label(window, textTkinter Label标签, bgred,# 设置标签内容区大小width30, height5,# 设置填充区距离、边框宽度和其样式凹陷式padx10, pady15, borderwidth10, reliefsunken) label.pack()# 显示图片 photo tk.PhotoImage(fileimg/1.png) tk.Label(window, imagephoto).pack()window.mainloop() Message控件 Message 控件与 Label 控件的功能类似它主要用来显示多行不可编辑的文本信息与 Label 的不同之处在于该控件增加了自动换行的功能。 # 第八章节Tkinter Message标签 import tkinter as tkwindow tk.Tk() # 设置窗口大小变量 width 300 height 300 # 窗口居中获取屏幕尺寸以计算布局参数使窗口居屏幕中央 screenwidth window.winfo_screenwidth() screenheight window.winfo_screenheight() size_geo %dx%d%d%d % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) window.geometry(size_geo)# 若内容是文字则以字符为单位图像则以像素为单位 txt 鹅鹅鹅曲项向天歌。白毛浮绿水红掌拨清波 msg tk.Message(window, texttxt, width60, font(微软雅黑, 10, bold)) msg .pack()window.mainloop() Tkinter Button 按钮控件 Button 控件是 Tkinter 中常用的窗口部件之一同时也是实现程序与用户交互的主要控件。通过用户点击按钮的行为来执行回调函数是 Button 控件的主要功用。首先自定义一个函数或者方法然后将函数与按钮关联起来最后当用户按下这个按钮时Tkinter 就会自动调用相关函数。 温馨提示按钮控件使用起来非常简单它同样可以包含文本、图像、位图并通过command参数回调函数。当然按钮也并非一定要执行回调函数callback function它也只可以当一个“摆设”不过这样的按钮是没有“灵魂的”。 # 第九章节Tkinter Button按钮标签点击关闭按钮实现窗口关闭 import tkinter as tkwindow tk.Tk() # 设置窗口大小变量 width 300 height 300 # 窗口居中获取屏幕尺寸以计算布局参数使窗口居屏幕中央 screenwidth window.winfo_screenwidth() screenheight window.winfo_screenheight() size_geo %dx%d%d%d % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) window.geometry(size_geo)# 设置回调函数 def callback():window.destroy() # 使用按钮控件调用函数 tk.Button(window, text关闭按钮, commandcallback).pack()window.mainloop() Button 控件的常营属性如下所示 属性说明anchor控制文本所在的位置默认为中心位置CENTERactivebackground当鼠标放在按钮上时候按妞的背景颜色activeforeground当鼠标放在按钮上时候按钮的前景色bd按钮边框的大小默认为 2 个像素bg按钮的背景色command用来执行按钮关联的回调函数。当按钮被点击时执行该函数fg按钮的前景色font按钮文本的字体样样式height按钮的高度highlightcolor按钮控件高亮处要显示的颜色image按钮上要显示的图片justify按钮显示多行文本时用来指定文本的对齐方式参数值有 LEFT/RIGHT/CENTERpadx/padypadx 指定 x 轴水平方向的间距大小pady 则表示 y轴垂直方向的间距大小ipadx/ipadyipadx 指标签文字与标签容器之间的横向距离ipady 则表示标签文字与标签容器之间的纵向距离state设置按钮的可用状态可选参数有NORMAL/ACTIVE/DISABLED默认为 NORMALtext按钮控件要显示的文本 拓展按钮布局 按钮在主窗口中的布局通常使用 grid() 函数来完成该函数以网格状的形式即行和列来管理窗口的布局。 grid() 布局管理器提供了一个sticky参数通过该参数可以设置按钮的方位该参数默认将控件设置居中其他参数值有 N/S/W/E上/下/左/右而且可以组合在一起使用比如 NW/WE/SE/SW/NE 等这与anchor参数控制文本的显示位置有着异曲同工之妙。如下图所示   # 第九章节Tkinter Button按钮标签基于grid网格布局实现高仿计算器 import tkinter as tk from tkinter import NSEWroot tk.Tk() root.geometry(200x240200300) root.title(计算器界面设计)frame tk.Frame(root) frame.pack()ent tk.Entry(frame) ent.grid(row0, column0, columnspan4, pady10) # columnspan跨列btnText ((MC, M, M-, MR),(C, ±, ➗, ✖),(7, 8, 9, -),(4, 5, 6, ),(1, 2, 3, ),(0, .))for rindex, r in enumerate(btnText):for cindex, c in enumerate(r):if c :tk.Button(frame, textc, width2).grid(rowrindex 1, columncindex, stickyNSEW, rowspan2)elif c 0:tk.Button(frame, textc, width2).grid(rowrindex 1, columncindex, stickyNSEW, columnspan2)elif c .:tk.Button(frame, textc, width2).grid(rowrindex 1, columncindex 1, stickyNSEW)else:tk.Button(frame, textc, width2).grid(rowrindex 1, columncindex, stickyNSEW)root.mainloop() Tkinter Entry输入控件 Entry 控件是 Tkinter GUI 编程中的基础控件之一它的作用就是允许用户输入内容从而实现 GUI 程序与用户的交互比如当用户登录软件时输入用户名和密码此时就需要使用 Entry 控件。 基本语法格式如下 tk_entry Entry( master, option, ... )基本属性 Entry 控件除了具备一些共有属性之外还有一些自身的特殊属性如下表所示 属性名称说明exportselection默认情况下如果在输入框中选中文本会复制到粘贴板如果要忽略这个功能可以设置为 exportselection0selectbackground选中文字时的背景颜色selectforeground选中文字时的前景色show指定文本框内容以何种样式的字符显示比如密码可以将值设为 show*textvariable输入框内值也称动态字符串使用 StringVar() 对象来设置而 text 为静态字符串对象xscrollcommand设置输入框内容滚动条当输入的内容大于输入框的宽度时使用户 动态数据类型  现状在界面编程的过程中有时我们需要“动态跟踪”一些变量值的变化从而保证值的变换及时的反映到显示界面上但是 Python 内置的数据类型是无法这一目的的因此使用了 Tkinter内置的对象我们把这些方法创建的数据类型称为“动态类型”。支持类型StringVar()、 BooleanVar()、DoubleVar()、IntVar() 下面通过时钟案例加深对动态数据类型 理解。 # 第十一章节Tkinter时钟功能 import tkinter as tk import timeroot tk.Tk() root.title(时钟) root.geometry(450x150100100) root.resizable(0, 0)# 获取时间的函数 def gettime():# 获取当前时间dstr.set(time.strftime(%H:%M:%S))# 每隔 1s 调用一次 gettime()函数来获取时间root.after(1000, gettime)# 生成动态字符串 dstr tk.StringVar() # 利用 textvariable 来实现文本变化 lb tk.Label(root, textvariabledstr, fggreen, font(微软雅黑, 85)) lb.pack() # 调用生成时间的函数 gettime() # 显示窗口 root.mainloop()常用方法 除了一些基本的属性之外Entry 控件还提供了一些常用的方法如下所示 方法说明delete()根据索引值删除输入框内的值get()获取输入框内的是set()设置输入框内的值insert()在指定的位置插入字符串index()返回指定的索引值select_clear()取消选中状态select_adujst()确保输入框中选中的范围包含 index 参数所指定的字符选中指定索引和光标所在位置之前的字符select_from (index)设置一个新的选中范围通过索引值 index 来设置select_present()返回输入框是否有处于选中状态的文本如果有则返回 true否则返回 false。select_to()选中指定索引与光标之间的所有值select_range()选中指定索引与光标之间的所有值参数值为 start,end要求 start 必须小于 end。 温馨提示在 Entry 控件中我们可以通过以下方式来指定字符的所在位置 数字索引表示从 0 开始的索引数字ANCHOE在存在字符的情况下它对应第一个被选中的字符END对应已存在文本中的最后一个位置insert(index,字符)将字符插入到 index 指定的索引位置。 # 第十二章节Tkinter Entry常用方法 import tkinter as tkroot tk.Tk() root.title(Tkinter Entry常用方法) root.geometry(450x150100100) root.resizable(0, 0)# 创建输入框控件 entry tk.Entry(root) # 放置输入框并设置位置 entry.pack(padx20, pady20) # 文本清空 entry.delete(0, end) # 默认文本 entry.insert(0, Tkinter Entry常用方法详解) # 获取输入框字符串 print(entry.get()) # 文本清空 # entry.delete(0, end)# 显示窗口 root.mainloop() Entry控件验证功能 Entry 控件也提供了对输入内容的验证功能比如要求输入英文字母你却输入了数字这就属于非法输入Entry 控件通过以下参数实现对内容的校验 参数说明validate指定验证方式字符串参数参数值有 focus、focusin、focusout、key、all、none。 validatecommand指定用户自定义的验证函数该函数只能返回 True 或者 Fasleinvalidcommand当 validatecommand 指定的验证函数返回 False 时可以使用该参数值再指定一个验证函数。 下面对 validate 的参数值做简单的介绍 参数值说明focus当 Entry 组件获得或失去焦点的时候验证focusin当 Entry 组件获得焦点的时候验证focuson当 Entry 组件失去焦点的时候验证key当输入框被编辑的时候验证all当出现上边任何一种情况的时候验证none 默认不启用验证功能需要注意的是这里是字符串的 none # 第十二章节Tkinter Entry数据校验 import tkinter as tk from tkinter import messageboxroot tk.Tk() root.title(Tkinter Entry常用方法) root.geometry(450x150100100) root.resizable(0, 0)# 创建验证函数 def check():if entry.get() abc123:messagebox.showinfo(输入正确)return Trueelse:messagebox.showwarning(输入不正确)entry.delete(0, tk.END)return False# 创建动字符串 dy_String tk.StringVar() # 创建输入框控件 entry tk.Entry(root, textvariabledy_String, validatefocusout, validatecommandcheck) # 放置输入框并设置位置 entry.pack(padx20, pady20)# 显示窗口 root.mainloop()Tkinter 还为验证函数提供可一些额外的选项不过想要使用这些额外选项需要提前使用 register() 方法对验证函数进行注册。常用的选项如下所示 选项说明%d有 3 个参数值其中 0 表示删除操作1 表示插入操作2 表示获得、失去焦点或 textvariable 变量的值被修改导%i当用户进行插入或者删除操作的时该选项不爱哦是插入或者删除的索引位置若是其他的情况则选项值为 -1%P该选项值指定了输入框内的文本内容只有当输入框的值允许改变的时候该选项值才会生效。%s改值为调用验证函数钱输入框内的文本内容%S该选项值只有插入或者删除操作触发验证函数的时候才会生效它表示了被删除或者插入的内容%v表示当前 Entry 控件的 validate 参数的值%V表示触发验证函数的原因值为 focus、focusin 、focusout、all、key.. 中的一个。%W该选项表示控件类型即控件的名字Entry # 第十四章节Tkinter Entry使用register() 实现数据校验 import tkinter as tk from tkinter import messageboxroot tk.Tk() root.title(Tkinter Entry常用方法) root.geometry(450x150100100) root.resizable(0, 0)# 创建验证函数 def check(strings, reason, id):if entry.get() abc123:messagebox.showinfo(输入正确)print(strings, reason, id)return Trueelse:messagebox.showwarning(输入不正确)entry.delete(0, tk.END)print(strings, reason, id)return False# 对验证函数进行注册 checkTest root.register(check) # 创建动字符串 dy_String tk.StringVar() # 创建输入框控件 entry tk.Entry(root, textvariabledy_String, validatefocusout, validatecommand(checkTest, %P, %V, %W)) # 放置输入框并设置位置 entry.pack(padx20, pady20)# 显示窗口 root.mainloop() Spinbox 高级输入框 Spinbox 是 Entry 控件的升级版它是 Tkinter 8.4 版本后新增的控件该控件不仅允许用户直接输入内容还支持用户使用微调选择器即上下按钮调节器来输入内容。在一般情况下Spinbox 控件用于在固定的范围内选取一个值的时候使用。 # 第十五章节Tkinter Spinbox import tkinter as tk from tkinter import messageboxroot tk.Tk() root.title(Tkinter Spinbox) root.geometry(450x150100100) root.resizable(0, 0)# 如果是数字使用 from_和to参数范围 0-20,并且与2步长递增或递减 w tk.Spinbox(root, from_0, to20, increment2, width15, bg#9BCD9B) w.pack() # 显示窗口 root.mainloop() 若不是数字而是字符串形式的选项值则采用values参数以元组的形式进行传参如下所示 # 使用 values 参数以元组的形式进行传参 strings tk.Spinbox(root,values(Python,java,C语言,PHP)) strings.pack() Tkinter Text文本框控件 Text 文本控件是 Tkinter 中经常使用的控件与 Entry 控件相比Text 控件用于显示和编辑多行文本而 Entry 控件则适合处理单行文本。 Text 控件的有很多的适用场景比如显示某个产品的详细信息或者人物介绍等。下面我们对 Text 控件属性和常用方法做简单的介绍。 基本属性 除了基本的共有属性之外Text 控件还具备以下属性 属性说明autoseparators默认为 True表示执行撤销操作时是否自动插入一个“分隔符”其作用是用于分隔操作记录exportselection默认值为 True表示被选中的文本是否可以被复制到剪切板若是 False 则表示不允许。insertbackground设置插入光标的颜色默认为 BLACKinsertborderwidth设置插入光标的边框宽度默认值为 0insertofftime该选项控制光标的闪烁频频率灭的状态insertontime该选项控制光标的闪烁频频率亮的状态selectbackground指定被选中文本的背景颜色默认由系统决定selectborderwidth指定被选中文本的背景颜色默认值是0selectforeground指定被选中文本的字体颜色默认值由系统指定setgrid默认值是 False指定一个布尔类型的值确定是否启用网格控制spacing1指定 Text 控件文本块中每一行与上方的空白间隔注意忽略自动换行且默认值为 0。spacing2指定 Text 控件文本块中自动换行的各行间的空白间隔忽略换行符默认值为0spacing3指定 Text 组件文本中每一行与下方的空白间隔忽略自动换行默认值是 0tabs定制 Tag 所描述的文本块中 Tab 按键的功能默认被定义为 8 个字符宽度比如 tabs(1c, 2c, 8c) 表示前 3 个 Tab 宽度分别为 1厘米2厘米8厘米。undo该参数默认为 False表示关闭 Text 控件的“撤销”功能若为 True 则表示开启wrap该参数用来设置当一行文本的长度超过 width 选项设置的宽度时是否自动换行参数值 none不自动换行、char按字符自动换行、word按单词自动换行xscrollcommand该参数与 Scrollbar 相关联表示沿水平方向上下滑动yscrollcommand该参数与 Scrollbar 相关联表示沿垂直方向左右滑动 基本方法 Text 中的方法有几十个之多这里不进行一一列举主要对常用的方法进行介绍如下表所示 方法说明bbox(index)返回指定索引的字符的边界框返回值是一个 4 元组格式为(x,y,width,height)edit_modified()该方法用于查询和设置 modified 标志该标标志用于追踪 Text 组件的内容是否发生变化edit_redo()“恢复”上一次的“撤销”操作如果设置 undo 选项为 False则该方法无效。edit_separator()插入一个“分隔符”到存放操作记录的栈中用于表示已经完成一次完整的操作如果设置 undo 选项为 False则该方法无效。get(index1, index2)返回特定位置的字符或者一个范围内的文字。image_cget(index, option)返回 index 参数指定的嵌入 image 对象的 option 选项的值如果给定的位置没有嵌入 image 对象则抛出 TclError 异常image_create()在 index 参数指定的位置嵌入一个 image 对象该 image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例。insert(index, text)在 index 参数指定的位置插入字符串第一个参数也可以设置为 INSERT表示在光标处插入END 表示在末尾处插入。delete(startindex [, endindex])删除特定位置的字符或者一个范围内的文字。see(index)如果指定索引位置的文字是可见的则返回 True否则返回 False。 # 第十七章节Tkinter Text import tkinter as tk from tkinter import messagebox, INSERTroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个文本控件 # width 一行可见的字符数height 显示的行数 text tk.Text(root, width50, height30, undoTrue, autoseparatorsFalse) # 适用 pack(fillX) 可以设置文本域的填充模式。比如 X表示沿水平方向填充Y表示沿垂直方向填充BOTH表示沿水平、垂直方向填充 text.pack() # INSERT 光标处插入END 末尾处插入 text.insert(INSERT, Tkinter Text 简单实例)# 显示窗口 root.mainloop() Text 控件通过 heigt 和 width 参数来控制文本域的大小即纸张大小当然您也可以将其设置为自适用模式即不设置具体的文本域大小。 下面的示例为上一个示例增加“撤销”和“恢复”的功能。 # 第十七章节Tkinter Text import tkinter as tk from tkinter import messagebox, INSERTroot tk.Tk() root.title(Tkinter Text) root.geometry(400x300)# 创建一个文本控件 # width 一行可见的字符数height 显示的行数 text tk.Text(root, width50, height3, undoTrue, autoseparatorsFalse) # 适用 pack(fillX) 可以设置文本域的填充模式。比如 X表示沿水平方向填充Y表示沿垂直方向填充BOTH表示沿水平、垂直方向填充 text.grid() # INSERT 光标处插入END 末尾处插入 text.insert(INSERT, Tkinter Text 简单实例)# 定义撤销和恢复方法调用edit_undo()和 edit_redo()方法 def backout():text.edit_undo()def regain():text.edit_redo()# 定义撤销和恢复按钮 tk.Button(root, text撤销, commandbackout).grid(row3, column0, stickyw, padx10, pady5) tk.Button(root, text恢复, commandregain).grid(row3, column0, stickye, padx10, pady5)# 显示窗口 root.mainloop() 文本控件Text支持三种类型的特殊结构即 Mark、Tag 以及 Index每一种结构都有相应的方法下面对这些结构做相关的介绍。 Index文本索引 Index 索引用于指定字符在文本中的真实位置这与我们经常使用 Python 索引是一样的不过在 Text 文本控件中两者之间的使用形式存在一些差异。 Tkinter 提供以下文本索引类型如下表所示 索引类型说明INSERT对应插入光标的位置CURRENT对应与鼠标坐标最接近的位置END对应 Text 控件的文本域中最后一个字符的下一个位置line.column表示某一行某一列的一个位置比如 1.2 表示第一行第二列的一个位置line.end表示某一行到末尾的最后一个位置SEL一种针对于 Tag 的特殊索引用法(SEL_FIRST,SEL_LAST) 表示当前被选中的范围 # 第十七章节Tkinter Text import tkinter as tk from tkinter import messagebox, INSERTroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个文本控件 # width 一行可见的字符数height 显示的行数 text tk.Text(root, width50, height30, undoTrue, autoseparatorsFalse) # 适用 pack(fillX) 可以设置文本域的填充模式。比如 X表示沿水平方向填充Y表示沿垂直方向填充BOTH表示沿水平、垂直方向填充 text.pack() # INSERT 光标处插入END 末尾处插入 text.insert(INSERT, Tkinter Text 简单实例)# 显示窗口 root.mainloop() Tag文本标签 Tag标签用来给一定范围内的文字起一个标签名通过该标签名就能操控某一范围内的文字比如修改文本的字体、尺寸和颜色。除此之外该标签还可以和事件函数绑定在一起使用。 这里需要注意Tags 的名字是由字符串组成的但不能是空白字符串。 Tag 提供了一些常用的方法通过这些方法可以操作 Tag标签常用方法如下 方法说明tag_add(tagName,index1,index2)为指定索引范围内的内容添加一个标签名字如果 index2 不存在则单独为 Index1 指定的内容添加 Tagtag_bind(tagName, sequence, func, addNone)为 Tag 绑定事件解除绑定使用 tag_unbind() 方法tag_cgettagName,option返回 tagName 指定的 option 选项的值tag_configure(tagName, cnfNone, **kw)设置 tagName 的选项tag_delete(tagNames)删除单个或者多个 tagNames 指定的标签tag_lower(tagName, belowThisNone)降低 Tag 的优先级如果 belowThis 参数不为空则表示 tagName 需要比 belowThis 指定的 Tag 优先级更低tag_names(indexNone)如果不带参数表示返回 Text 组件中所有 Tags 的名字若存在 index 参数则返回该位置上所有 Tags 的名字tag_nextrange(tagName, index1, index2None) 在 index1 到 index2 的范围内第一个 tagName 的位置若不存在则返回空字符串。tag_raise(tagName, aboveThisNone)提高 Tag 的优先级如果 aboveThis 参数不为空则表示 tagName 需要比 aboveThis 指定的 Tag 优先级更高tag_ranges(tagName)返回所有 tagName 指定的文本并将它们的范围以列表的形式返回tag_remove(tagName, index1, index2None)删除 index1 到 index2 之间所有的 tagName如果忽略 index2 参数那么只删除 index1 指定字符的 tagName # 第十七章节Tkinter Text Tag标签 import tkinter as tk from tkinter import messagebox, INSERT, ENDroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个文本控件 # width 一行可见的字符数height 显示的行数 text tk.Text(root, width50, height30, undoTrue, autoseparatorsFalse) # 适用 pack(fillX) 可以设置文本域的填充模式。比如 X表示沿水平方向填充Y表示沿垂直方向填充BOTH表示沿水平、垂直方向填充 text.pack() # INSERT 光标处插入END 末尾处插入 text.insert(INSERT, Tkinter Text 简单实例)# 在Text控件内插入- -个按钮 button tk.Button(text, text关闭, commandroot.quit) text. window_create(END, windowbutton)# 在第一行文字的第0个字符到第6个字符处插入标签标签名称为name text.tag_add(name, 1.0, 1.6) # 将插入的按钮设置其标签名为button text.tag_add(button, button) # 使用 tag_config() 来改变标签name的前景与背景颜色,并加下画线通过标签控制字符的样式 text.tag_config(name, font(微软雅黑, 18, bold), backgroundyellow, foregroundblue, underline1) # 设置标签button的居中排列 text.tag_config(button, justifycenter)# 显示窗口 root.mainloop() Mark文本标记 Mark标记通常被用来当作书签它可以帮助用户快速找到内容的指定位置并且跟随相应的字符一起移动。 Mark 有两种类型的标记分别是“INSERT”和“CURRENT”其含义如下 INSERT指定当前插入光标的位置Tkinter 会在该位置绘制一个闪烁的光标CURRENT用于指定当前光标所处坐标最邻近的位置。 它们是 Tkinter 中预定义的标记因此不能被删除。除此上述标记外我们还可以通过 user-define marks用户自定义标记 的方式来自定义 Mark。Tkinter 也提供了一些有关 Mark 的常用的方法如下所示 方法说明mark_gravity(markName, directionNone)设置 Mark 的移动方向默认是 right也可以设置为 left 表示即如果在 Mark 处插入文本的话Mark 的标记移动方向也就是文本的插入方向。mark_names()返回 Text 组件中所有 Marks 的名字mark_next(index)返回在 index 指定的位置后边的一个 Mark 的名字mark_previous(index)返回在 index 指定的位置前边的一个 Mark 的名字mark_set(markName, index)移动 Mark 到 index 参数指定的位置如果 markName 参数指定的 Mark 不存在则创建一个新的 Markmark_unset(MarkName)删除指定的 Mark 注意如果在 Mark 标记的位置之前插入或删除文本那么 Mark 跟着一起移动。如果要删除 Mark 需要使用 mark_unset() 方法但是只会删除 Mark 周围的文本并不会删除 Mark 标记本身。 # 第十七章节Tkinter Text Mark标签 import tkinter as tk from tkinter import messagebox, INSERT, ENDroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个文本控件 # width 一行可见的字符数height 显示的行数 text tk.Text(root, width50, height30, undoTrue, autoseparatorsFalse) # 适用 pack(fillX) 可以设置文本域的填充模式。比如 X表示沿水平方向填充Y表示沿垂直方向填充BOTH表示沿水平、垂直方向填充 text.pack() # INSERT 光标处插入END 末尾处插入 text.insert(INSERT, Tkinter Text 简单实例)# 在Text控件内插入- -个按钮 button tk.Button(text, text关闭, commandroot.quit) text. window_create(END, windowbutton)# 在第一行文字的第0个字符到第6个字符处插入标签标签名称为name text.tag_add(name, 1.0, 1.6) # 将插入的按钮设置其标签名为button text.tag_add(button, button) # 使用 tag_config() 来改变标签name的前景与背景颜色,并加下画线通过标签控制字符的样式 text.tag_config(name, font(微软雅黑, 18, bold), backgroundyellow, foregroundblue, underline1) # 设置标签button的居中排列 text.tag_config(button, justifycenter)# 设置标记这里的 1.end 表示 第一行最后一个字符当然也可以使用数字来表示比如 1.5 表示第一行第五个字符 text.mark_set(name, 1.end) # 在标记之后插入相应的文字 text.insert(name, ,Mark 标签) # 跟着自动移动往后插入而不是停留在原位置 text.insert(name, ,欢迎光临) # 若使用 mark_unset() 可以删除指定的标记 # text.mark_unset(name) # 但使用delete来清楚所有的内容 mark 标记依旧会存在 # text.delete(1.0,end) # 依然可以使用 name标记来插入 # text.insert(name, Python3.0)# 显示窗口 root.mainloop() Tkinter列表框和组合框控件详解 列表框Listbox和复选框Combobox是 Tkinter 中两个控件由于其非常相似本节将它们放在一起进行介绍。 Listbox控件 首先介绍一下列表框即 Listbox。在使用 Tkinter 进行 GUI 编程的过程中如果需要用户自己进行选择时就可以使用列表框控件。列表框中的选项可以是多个条目也可以是单个唯一条目但常用于多个条目。 列表框控件Listbox常用方法介绍 方法说明activate(index)将给定索引号对应的选项激活即文本下方画一条下划线bbox(index)返回给定索引号对应的选项的边框返回值是一个以像素为单位的 4 元祖表示边框(xoffset, yoffset, width, height) xoffset 和 yoffset 表示距离左上角的偏移位置curselection()返回一个元组包含被选中的选项序号从 0 开始delete(first, lastNone) 删除参数 first 到 last 范围内包含 first 和 last的所有选项get(first, lastNone)返回一个元组包含参数 first 到 last 范围内包含 first 和 last的所有选项的文本index(index)返回与 index 参数相应选项的序号itemcget(index, option)获得 index 参数指定的项目对应的选项由 option 参数指定itemconfig(index, **options)设置 index 参数指定的项目对应的选项由可变参数 **option 指定nearest(y)返回与给定参数 y 在垂直坐标上最接近的项目的序号selection_set(first, lastNone)设置参数 first 到 last 范围内包含 first 和 last选项为选中状态使用 selection_includes(序号) 可以判断选项是否被选中。 size()返回 Listbox 组件中选项的数量xview(*args)该方法用于在水平方向上滚动 Listbox 组件的内容一般通过绑定 Scollbar 组件的 command 选项来实现。 如果第一个参数是 moveto则第二个参数表示滚动到指定的位置0.0 表示最左端1.0 表示最右端如果第一个参数是 scroll则第二个参数表示滚动的数量第三个参数表示滚动的单位可以是 units 或 pages例如xview(scroll, 2, pages)表示向右滚动二行。yview(*args)该方法用于在垂直方向上滚动 Listbox 组件的内容一般通过绑定 Scollbar 组件的 command 选项来实现 除了共有属性之外列表框控件也有一些其他属性如下表所示 属性说明listvariable1. 指向一个 StringVar 类型的变量该变量存放 Listbox 中所有的项目 2. 在 StringVar 类型的变量中用空格分隔每个项目例如 var.set(c c java python)selectbackground1. 指定当某个项目被选中的时候背景颜色默认值由系统指定selectborderwidth1. 指定当某个项目被选中的时候边框的宽度 2. 默认是由 selectbackground 指定的颜色填充没有边框 3. 如果设置了此选项Listbox 的每一项会相应变大被选中项为 raised 样式selectforeground1. 指定当某个项目被选中的时候文本颜色默认值由系统指定selectmode1. 决定选择的模式tk 提供了四种不同的选择模式分别是single单选、browse也是单选但拖动鼠标或通过方向键可以直接改变选项、multiple多选和 extended也是多选但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现默认是 browsesetgrid指定一个布尔类型的值决定是否启用网格控制默认值是 Falsetakefocus指定该组件是否接受输入焦点用户可以通过 tab 键将焦点转移上来默认值是 Truexscrollcommand为 Listbox 组件添加一条水平滚动条将此选项与 Scrollbar 组件相关联即可yscrollcommand为 Listbox 组件添加一条垂直滚动条将此选项与 Scrollbar 组件相关联即可 # 第二十一章节Tkinter ListBox import tkinter as tk from tkinter import messagebox, INSERT, ENDroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建列表选项 listbox1 tk.Listbox(root) listbox1.pack() # i表示索引值item 表示值根据索引值的位置依次插入 for i, item in enumerate([C, C, JavaScript, Python, Java, SQL]):listbox1.insert(i, item)# 显示窗口温馨提示除了使用 enumerate() 来实现选项插入的方法外我们还可以使用 “end” 实现它表示将选项插入到最后一个位置。核心代码片段 # i表示索引值item 表示值根据索引值的位置依次插入 for item in [C,C,C#,Python,Java]:listbox1.insert(end,item) 为列表框控件Listbox增加滚动条和删除功能 # 第二十一章节Tkinter ListBox 添加滚动条和删除功能 import tkinter as tk from tkinter import messagebox, INSERT, END, RIGHT, Y, MULTIPLE, ACTIVE, BOTTOMroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建滚动条 s tk.Scrollbar(root) # 设置垂直滚动条显示的位置使得滚动条靠右侧通过 fill 沿着 Y 轴填充 s.pack(sideRIGHT, fillY)# 创建列表选项将selectmode设置为多选模式并为Listbox控件添加滚动条 listbox1 tk.Listbox(root, selectmodeMULTIPLE, height5, yscrollcommands.set) listbox1.pack() # i表示索引值item 表示值根据索引值的位置依次插入 for i, item in enumerate([C, C, JavaScript, Python, Java, SQL]):listbox1.insert(i, item) # 设置滚动条使用 yview使其在垂直方向上滚动 Listbox 组件的内容通过绑定 Scollbar 组件的 command 参数实现 s.config(commandlistbox1.yview)# 使用匿名函数,创建删除函数点击删除按钮会删除选项 bt tk.Button(root, text删除, commandlambda xlistbox1:x.delete(ACTIVE)) # 将按钮放置在底部 bt.pack(sideBOTTOM) # 显示窗口 root.mainloop() StringVar() 动态获取列表选项 如何通过 StringVar() 方法动态地获取列表框中的选中项示例代码如下 # 第二十一章节Tkinter ListBox 获取列表项选择值 import tkinter as tk from tkinter import messagebox, INSERT, END, RIGHT, Y, MULTIPLE, ACTIVE, BOTTOMroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建变量用var1用来接收鼠标点击的具体选项内容 var1 tk.StringVar() l tk.Label(root, bg#B0B0B0, font(微软雅黑, 15), width20, textvariablevar1) l.pack()# 创建一个按钮的点击事件 def click_button():# 使用 curselection来选中文本try:val listbox1.get(listbox1.curselection())# 设置label值var1.set(val)except Exception as e:e 发现一个错误messagebox.showwarning(e, 没有选择任何条目)# 创建一个按钮并放置点击按钮调用print_selection函数 b1 tk.Button(root, text获取当前选项, commandclick_button) b1.pack()# 创建Listbox并为其添加内容 var2 tk.StringVar() var2.set((C语言辅导班, Python答疑辅导, Java答疑辅导, C辅导))s tk.Scrollbar(root) # 设置垂直滚动条显示的位置使得滚动条靠右侧通过 fill 沿着 Y 轴填充 s.pack(sideRIGHT, fillY)# 创建列表选项将selectmode设置为多选模式并为Listbox控件添加滚动条 listbox1 tk.Listbox(root, selectmodeMULTIPLE, height5, yscrollcommands.set, listvariablevar2) listbox1.pack() # i表示索引值item 表示值根据索引值的位置依次插入 for i, item in enumerate([C, C, JavaScript, Python, Java, SQL]):listbox1.insert(i, item) # 设置滚动条使用 yview使其在垂直方向上滚动 Listbox 组件的内容通过绑定 Scollbar 组件的 command 参数实现 s.config(commandlistbox1.yview)# 使用匿名函数,创建删除函数点击删除按钮会删除选项 bt tk.Button(root, text删除, commandlambda xlistbox1:x.delete(ACTIVE)) # 将按钮放置在底部 bt.pack(sideBOTTOM) # 显示窗口 root.mainloop() Combobox控件 Combobox是一个组合框控件它是 Entry 控件和 Listbox 控件的组合用户可以从下拉列表中选择一项也可以手动输入。 其语法格式如下所示 cboxCombobox(窗口对象,[参数列表]) 对于 Combobox 控件而言它常用的方法有两个分别是 get() 和 current()前者表示获取当前选中选项的内容后者表示获取选中选项的索引值。下面通过一组简单的示例进一步了解 Combobox 控件示例代码如下 # 第二十一章节Tkinter ComboxBox import tkinter as tk from tkinter import messagebox, INSERT, END, ttkroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)def callback(event):print(选择项:, combo.get())# 创建一个 Combobox combo ttk.Combobox(root) # 设置 Combobox 的选项 combo[values] (选项 A, 选项 B, 选项 C)# 设置默认选择的项 combo.current(0)# 为选项选择设置一个回调函数 combo.bind(ComboboxSelected, callback)combo.pack()# 显示窗口 root.mainloop() Tkinter单选框和多选框按钮 单选框按钮控件Radiobutton同样允许用户选择具体的选项值不过与 Listbox 相比单选按钮控件仅允许用户选择单一的选项值各个选项值之间是互斥的关系因此只有一个选项可以被用户选择。 Radiobutton 控件通常都是成组出现的所有控件都使用相同的变量。Radiobutton 可以包含文本或图像每一个按钮都可以与一个 Python 函数相关联。当按钮被按下时对应的函数会被执行。这里需要注意的是单选按钮控件仅能显示单一字体的文本但文本可以跨越多行除此之外您还可以为个别的字符添加下划线。 Radiobutton 除常用的共有属性之外还具有一些其他属性如下表所示 属性说明activebackground设置当 Radiobutton 处于活动状态通过 state 选项设置状态的背景色默认值由系统指定activeforeground设置当 Radiobutton 处于活动状态通过 state 选项设置状态的前景色默认值由系统指定compound1. 默认值为 None控制 Radiobutton 中文本和图像的混合模式默认情况下如果有指定位图或图片则不显示文本 2. 如果该选项设置为 center文本显示在图像上文本重叠图像 3. 设置为 bottomleftright 或 top那么图像显示在文本的旁边比如如bottom则显示图像在文本的下方。disabledforeground指定当 Radiobutton 不可用的时的前景色颜色默认由系统指定indicatoron1. 该参数表示选项前面的小圆圈是否被绘制默认为 True即绘制 2. 如果设置为 False则会改变单选按钮的样式当点击时按钮会变成 sunken凹陷再次点击变为 raised凸起selectcolor设置当 Radiobutton 为选中状态的时候显示的图片如果没有指定 image 选项该选项被忽略takefocus如果是 True该组件接受输入焦点默认为 Falsevariable表示与 Radiobutton 控件关联的变量注意同一组中的所有按钮的 variable 选项应该都指向同一个变量通过将该变量与 value 选项值对比可以判断用户选中了哪个按钮 Radiobutton 控件的常用方法如下所示 方法说明deselect()取消该按钮的选中状态flash()刷新 Radiobutton 控件该方法将重绘 Radiobutton控件若干次即在active 和 normal 状态间切换invoke()1. 调用 Radiobutton 中 command 参数指定的函数并返回函数的返回值 2. 如果 Radiobutton 控件的 state(状态) 是 disabled 不可用或没有指定 command 选项则该方法无效select()将 Radiobutton 控件设置为选中状态 # 第二十五章节Tkinter Radiobutton import tkinter as tk from tkinter import messagebox, INSERT, END, ttkroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0) # IntVar() 用于处理整数类型的变量 v tk.IntVar() # 根据单选按钮的 value 值来选择相应的选项 v.set(0) # 使用 variable 参数来关联 IntVar() 的变量 v tk.Radiobutton(root, text苹果, fgblue, font(微软雅黑, 12, bold), variablev, value0).pack(anchorw) tk.Radiobutton(root, text香蕉, variablev, value2).pack(anchorw) tk.Radiobutton(root, text梨, variablev, value3).pack(anchorw) tk.Radiobutton(root, text西瓜, variablev, value4).pack(anchorw)# 显示窗口 root.mainloop() 上述代码是比较直接的写法虽然编码过程简单但是从代码重构的角度来讲它是比较冗余的因此我们推荐下面这种写法如下所示 # 第二十五章节Tkinter Radiobutton 优化 import tkinter as tk from tkinter import messagebox, INSERT, END, ttkroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)site [(Java 从入门到精通, 1),(SQL 从入门到放弃, 2),(JavaScrit 高手荆棘之路, 3),(Python 项目实战, 4)] # IntVar() 用于处理整数类型的变量 v tk.IntVar() # 重构后的写法也非常简单易懂 for name, num in site:radio_button tk.Radiobutton(root, textname, variablev, valuenum)radio_button.pack(anchorw)# 显示窗口 root.mainloop() 再对上述代码稍作修改当点击某一按钮时获取选项的内容代码如下 # 第二十五章节Tkinter Radiobutton 优化 点击事件 import tkinter as tk from tkinter import messagebox, INSERT, END, ttkdef select():dicts {1: Java 从入门到精通, 2: SQL 从入门到放弃, 3: JavaScrit 高手荆棘之路, 4: Python 项目实战}strings 您选择了 dicts.get(v.get()) 祝您学习愉快lable.config(textstrings)root tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)lable tk.Label(root, font(微软雅黑, 15, bold), fg#43CD80) lable.pack(sidebottom)site [(Java 从入门到精通, 1),(SQL 从入门到放弃, 2),(JavaScrit 高手荆棘之路, 3),(Python 项目实战, 4)] # IntVar() 用于处理整数类型的变量 v tk.IntVar() # 重构后的写法也非常简单易懂 for name, num in site:radio_button tk.Radiobutton(root, textname, variablev, valuenum, commandselect, indicatoronFalse)radio_button.pack(anchorw)# 显示窗口 root.mainloop() Checkbutton复选框控件 Checkbutton 控件是一种供用户选择相应条目的按钮控件但与 Radiobutton 不同的是Checkbutton 控件不仅允许用户选择一项还允许用户同时选择多项各个选项之间属于并列的关系。 复选框控件同样有许多适用场景比如选择兴趣爱好、选择选修课以及购买多个物品等在这种情况下都可以使用复选框控件其语法格式如下 Checkbutton(masterNone, **options) 复选框控件除了具有常用的共有属性之外还具有一些其他重要属性和常用方法下面对它们做简单地介绍 属性说明text显示的文本使用 \n 来对文本进行换行。variable1. 和复选框按钮关联的变量该变量值会随着用户选择行为来改变选或不选即在 onvalue 和 offvalue 设置值之间切换这些操作由系统自动完成 2. 在默认情况下variable 选项设置为 1 表示选中状态反之则为 0表示不选中。onvalue通过设置 onvalue 的值来自定义选中状态的值。offvalue通过设置 offvalue 的值来自定义未选中状态的值。indicatoron默认为 True表示是否绘制用来选择的选项的小方块当设置为 False 时会改变原有按钮的样式与单选按钮相同selectcolor选择框的颜色即小方块的颜色默认由系统指定selectimage设置当 Checkbutton 为选中状态的时候显示的图片若如果没有指定 image 选项该选项被忽略textvariableCheckbutton 显示 Tkinter 变量通常是一个 StringVar 变量的内容如果变量被修改Checkbutton 的文本会自动更新wraplength表示复选框文本应该被分成多少行该选项指定每行的长度单位是屏幕单元默认值为 0 # 第二十五章节Tkinter Checkbutton import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 新建整型变量 CheckVar1 tk.IntVar() CheckVar2 tk.IntVar() CheckVar3 tk.IntVar() # 设置三个复选框控件使用variable参数来接收变量 check1 tk.Checkbutton(root, textPython, font(微软雅黑, 15, bold), variableCheckVar1, onvalue1, offvalue0) check2 tk.Checkbutton(root, textC语言, font(微软雅黑, 15, bold), variableCheckVar2, onvalue1, offvalue0) check3 tk.Checkbutton(root, textJava, font(微软雅黑, 15, bold), variableCheckVar3, onvalue1, offvalue0) # 选择第一个为默认选项 # check1.select () check1.pack(sideLEFT) check2.pack(sideLEFT) check3.pack(sideLEFT)# 定义执行函数 def study():# 没有选择任何项目的情况下if (CheckVar1.get() 0 and CheckVar2.get() 0 and CheckVar3.get() 0):s 您还没选择任语言else:s1 Python if CheckVar1.get() 1 else s2 C语言 if CheckVar2.get() 1 else s3 Java if CheckVar3.get() 1 else s 您选择了%s %s %s % (s1, s2, s3)# 设置标签lb2的字体lb2.config(texts)btn tk.Button(root, text选好了, bg#BEBEBE, commandstudy) btn.pack(sideLEFT) # 该标签用来显示选择的文本 lb2 tk.Label(root, text, bg#9BCD9B, font(微软雅黑, 11, bold), width5, height2) lb2.pack(sideBOTTOM, fillX)# 显示窗口 root.mainloop() 复选框控件提供以下常用方法如下表所示 方法属性desellect()取消 Checkbutton 组件的选中状态也就是设置 variable 为 offvalueflash()刷新 Checkbutton 组件对其进行重绘操作即将前景色与背景色互换从而产生闪烁的效果。invoke()1. 调用 Checkbutton 中 command 选项指定的函数或方法并返回函数的返回值 2. 如果 Checkbutton 的state(状态)disabled是 不可用或没有指定 command 选项则该方法无效select()将 Checkbutton 组件设置为选中状态也就是设置 variable 为 onvaluetoggle()改变复选框的状态如果复选框现在状态是 on就改成 off反之亦然 核心代码片段 # 设置三个复选框控件使用variable参数来接收变量 check1 tk.Checkbutton(root, textPython, font(微软雅黑, 15, bold), variableCheckVar1, onvalue1, offvalue0) check2 tk.Checkbutton(root, textC语言, font(微软雅黑, 15, bold), variableCheckVar2, onvalue1, offvalue0) check3 tk.Checkbutton(root, textJava, font(微软雅黑, 15, bold), variableCheckVar3, onvalue1, offvalue0) # 选择第一个为默认选项 check1.select() check1.pack(sideLEFT) check2.pack(sideLEFT) check3.pack(sideLEFT) Tkinter Scale控件详解 Scale 控件即滑块控件或标尺控件该控件可以创建一个类似于标尺式的滑动条对象用户通过操作它可以直接设置相应的数值刻度值)。 Scale 控件同样有许多应用场景并且在我们日常工作中也会经常用到比如电脑上调节音量的滑动条数值范围 0-100 Scale 控件常用的基本属性如下所示 参数说明activebackground指定当鼠标在上方飘过的时候滑块的背景颜色bigincrement1. 设置“大”增长量 2. 该选项设置增长量的大小 3. 默认值是 0增长量为范围的 1/10borderwidth1. 指定边框宽度 2. 默认值是 2command1. 指定一个函数每当滑块发生改变的时候都会自动调用该函数 2. 该函数有一个唯一的参数就是最新的滑块位置 3. 如果滑块快速地移动函数可能无法获得每一个位置但一定会获得滑块停下时的最终位置digits1. 设置最多显示多少位数字 2. 补充注释例如设置 from 选项为 0to 选项为 20digits 选项设置为 5那么滑块的范围就是在 0.000 ~ 20.000 直接滑动 3. 默认值是 0不开启font1. 指定滑块左侧的 Label 和刻度的文字字体 2. 默认值由系统指定from_1. 设置滑块最顶左端的位置 2. 默认值是 0highlightcolor1. 指定当 Scale 获得焦点的时候高亮边框的颜色 2. 默认值由系统指定label1. 你可以在垂直的 Scale 组件的顶端右侧水平的话是左端上方显示一个文本标签 2. 默认值是不显示标签length1. Scale 组件的长度默认值是 100 像素orient1. 设置 Scale 控件是水平放置HORIZONTAL还是垂直放置VERTICAL 2. 默认值是 VERTICAL垂直放置repeatdelay1. 该选项指定鼠标左键点击滚动条凹槽的响应时间 2. 默认值是 300毫秒repeatinterval1. 该选项指定鼠标左键紧按滚动条凹槽时的响应间隔 2. 默认值是 100毫秒resolution1. 指定 Scale 组件的分辨率每点击一下移动的步长 示例 比如 resolution 选项设置为 0.1 的话那么每点击一下鼠标就是在 0.0 ~ 20.0 之间以 0.1 的步长移动 2. 该参数的默认值是 1showvalue1. 设置是否显示滑块旁边的数字 2. 默认值为 Truesliderlength1. 设置滑块的长度 2. 默认值是 30 像素state1. 默认情况下 Scale 组件支持鼠标事件和键盘事件可以通过设置该选项为 DISABLED 来禁用此功能 2. 默认值是 NORMALtakefocus1. 指定使用 Tab 键是否可以将焦点移动到该 Scale 组件上 2. 默认是开启的可以通过将该选项设置为 False 避免焦点落在此组件上tickinterval1. 设置显示的刻度如果设置一个值那么就会按照该值的倍数显示刻度 2. 默认值是不显示刻度to1. 设置滑块最底右端的位置 2. 默认值是 100troughcolor1. 设置凹槽的颜色 2. 默认值由系统指定variable1. 指定一个与 Scale 组件相关联的 Tkinter 变量该变量存放滑块最新的位置 2. 当滑块移动的时候该变量的值也会发生相应的变化width1. 指定 Scale 组件的宽度 2. 默认值是 15 像素 Scale 常用方法有如下四个见下表所示 方法说明coords(valueNone)1. 获得当前滑块位置相对于 Scale 控件左上角位置的相对坐标 2. 如果设置了 value 值则返回当滑块位于该位置时与左上角的相对坐标get()获得当前滑块的位置即当前数值返回值可以为整型或者浮点型identify(x, y)返回一个字符串表示指定位置下的 Scale 控件set(value)设置 Scale 控件的值即滑块的位置默认为初始位置 # 第二十五章节Tkinter Scale import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 添加一个 Scale 控件默认垂直方向步长设置为 5长度为200滑动块的大小为 50最后使用label参数文本 s tk.Scale(root, from_100, to0, resolution5, length200, sliderlength20, label音量控制) s.pack() # 设置滑块的位置 s.set(value15)# 显示窗口 root.mainloop() 下面看一个稍微复杂点的应用示例代码如下 # 第二十五章节Tkinter Scale import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个文本标签 label tk.Label(root, bg#9FB6CD, width18, text) label.grid(row2)# 创建执行函数 def select_price(value):label.config(text您购买的数量是 value)# 创建 Scale控件 scale tk.Scale(root,label选择您要购买的数量,from_1,to100,orienttk.HORIZONTAL, # 设置Scale控件平方向显示length400,tickinterval9, # 设置刻度滑动条的间隔commandselect_price) # 调用执行函数是数值显示在 Label控件中 scale.grid(row1)# 显示窗口 root.mainloop() Tkinter Menu菜单控件 Menu 控件菜单控件可以说是 GUI 中“精髓所在”它以可视化的方式将一系列的“功能选项卡”进行分组并在每个分组下又“隐藏”了许多其他的“选项卡”。当打开菜单时这些选项卡就会“显式”的呈现出来方便用户进行选择。 通过使用菜单控件Menu可以充分地节省有限的窗口区域让我们的界面更加简洁优雅避免臃肿、混乱。  Tkinter Menu 控件提供了三种类型的菜单分别是topleve主目录菜单、pull-down下拉式菜单、pop-up弹出式菜单或称快捷式菜单。 下表列出创建菜单时用到的相关方法如下所示 方法说明add_cascade(**options)添加一个父菜单将一个指定的子菜单通过 menu 参数与父菜单连接从而创建一个下拉菜单。add_checkbutton(**options)添加一个多选按钮的菜单项add_command(**options) 添加一个普通的命令菜单项add_radiobutton(**options)添加一个单选按钮的菜单项add_separator(**options) 添加一条分割线add(add(itemType, options))添加菜单项此处 itemType 参数可以是以下几种command、cascade checkbutton、radiobutton、separator 五种并使用 options 选项来设置 菜单其他属性。 除了上述方法之外Menu 控件也提供了一些其他方法来操作菜单项比如删除菜单项、获取菜单项、设置指定的菜单项等如下表所示   方法说明delete(index1, index2None)1. 删除 index1 ~ index2包含的所有菜单项 2. 如果忽略 index2 参数则删除 index1 指向的菜单项entrycget(index, option)获得指定菜单项的某选项的值entryconfig(index, **options)设置指定菜单项的选项index(index)返回与 index 参数相应的选项的序号insert(index, itemType, **options)插入指定类型的菜单项到 index 参数指定的位置类型可以是 是commandcascadecheckbuttonradiobutton 或 separator 中的一个或者也可以使用 insert_类型() 形式来 比如 insert_cascade(index, **options)..等invoke(index)调用 index 指定的菜单项相关联的方法post(x, y)在指定的位置显示弹出菜单type(index)获得 index 参数指定菜单项的类型unpost()移除弹出菜单yposition(index)返回 index 参数指定的菜单项的垂直偏移位置 下面对 Menu 控件的 options 参数做简单地介绍如下所示 属性说明accelerator1. 设置菜单项的快捷键快捷键会显示在菜单项目的右边比如 accelerator CtrlO 表示打开 2. 注意此选项并不会自动将快捷键与菜单项连接在一起必须通过按键绑定来实现command选择菜单项时执行的 callback 函数label定义菜单项内的文字menu此属性与 add_cascade() 方法一起使用用来新增菜单项的子菜单项selectcolor指定当菜单项显示为单选按钮或多选按钮时选择中标志的颜色state定义菜单项的状态可以是 normal、active 或 disabledonvalue/offvalue1. 默认情况下variable 选项设置为 1 表示选中状态反之设置为 0设置 offvalue/onvalue 的值可以自定义未选中状态的值 2. tearoff1. 如果此选项为 True在菜单项的上面就会显示一个可选择的分隔线 2. 注意分隔线会将此菜单项分离出来成为一个新的窗口underline设置菜单项中哪一个字符要有下画线value1. 设置按钮菜单项的值 2. 在同一组中的所有按钮应该拥有各不相同的值 3. 通过将该值与 variable 选项的值对比即可判断用户选中了哪个按钮variable当菜单项是单选按钮或多选按钮时与之关联的变量 1创建主目录菜单 主目录菜单也称之为“顶级菜单”下拉菜单等其他子菜单的都需要建立在“顶级菜单”的基础之上下面示例创建了一个类似于“记事本”界面的程序代码如下 # 第三十一章节Tkinter Menu import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 绑定一个执行函数当点击菜单项的时候会显示一个消息对话框 def menuCommand():tk.messagebox.showinfo(主菜单栏, 你正在使用主菜单栏)# 创建一个主目录菜单也被称为顶级菜单 main_menu tk.Menu(root) # 新增命令菜单项使用 add_command() 实现 main_menu.add_command(label文件, commandmenuCommand) main_menu.add_command(label编辑, commandmenuCommand) main_menu.add_command(label格式, commandmenuCommand) main_menu.add_command(label查看, commandmenuCommand) main_menu.add_command(label帮助, commandmenuCommand) # 显示菜单 root.config(menumain_menu)# 显示窗口 root.mainloop() 2) 创建下拉菜单 下拉菜单时主菜单的重要组成部分也是用户选择相关命令的重要交互界面下拉菜单的创建方式也非常简单不过需要我们注意下拉菜单是建立的主菜单即顶级菜单的基础之上的并非主窗口之上这一点千万不要搞混否则创建下拉菜单会失败。 下面继续仿照“记事本”的相关功能来创建下拉菜单示例如下 # 第三十一章节Tkinter Menu import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 绑定一个执行函数当点击菜单项的时候会显示一个消息对话框 def menuCommand():tk.messagebox.showinfo(主菜单栏, 你正在使用主菜单栏)# 创建一个主目录菜单也被称为顶级菜单 main_menu tk.Menu(root)# 在顶级菜单上新增文件菜单的子菜单同时不添加分割线 filemenu tk.Menu(root, tearoffFalse) # 新增文件菜单的菜单项并使用 accelerator 设置菜单项的快捷键 filemenu.add_command(label新建, commandmenuCommand, acceleratorCtrlN) filemenu.add_command(label打开, commandmenuCommand, acceleratorCtrlO) filemenu.add_command(label保存, commandmenuCommand, acceleratorCtrlS) # 添加一条分割线 filemenu.add_separator() filemenu.add_command(label退出, commandroot.quit) # 在主目录菜单上新增文件选项并通过menu参数与下拉菜单绑定 main_menu.add_cascade(label文件, menufilemenu) # 新增命令菜单项使用 add_command() 实现 main_menu.add_command(label编辑, commandmenuCommand) main_menu.add_command(label格式, commandmenuCommand) main_menu.add_command(label查看, commandmenuCommand) main_menu.add_command(label帮助, commandmenuCommand)# 显示菜单 root.config(menumain_menu)# 显示窗口 root.mainloop() 3) 创建弹出菜单栏 弹出式菜单栏也称为快捷式菜单栏比如通过点击鼠标右键弹出一个菜单栏其中包含一些常用的选项卡如复制、粘贴等如下所示在记事本的空白处点击鼠标右键会弹出一个菜单栏。 # 第三十一章节Tkinter Menu import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)def func():print(您通过弹出菜单执行了命令)# 创建一个弹出菜单 menu tk.Menu(root, tearoffFalse) menu.add_command(label新建, commandfunc) menu.add_command(label复制, commandfunc) menu.add_command(label粘贴, commandfunc) menu.add_command(label剪切, commandfunc)# 定义事件函数 def command(event):# 使用 post()在指定的位置显示弹出菜单menu.post(event.x_root, event.y_root)# 绑定鼠标右键这是鼠标绑定事件 # Button-3表示点击鼠标的右键1 表示左键2表示点击中间的滑轮 root.bind(Button-3, command)# 显示窗口 root.mainloop() 4) 菜单按钮控件 Menubutton菜单按钮控件是一个与 Menu 控件相关联的按钮当我们按下按钮的时候下拉菜单就会自动弹出。通过 Menubutton 创建的菜单按钮可以自由地放置在窗口中的任意位置从而提高了 GUI 界面的灵活性。 下面看一组简单使用示例 # 第三十一章节Tkinter Menu import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, Xroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个菜单按钮 menubtn tk.Menubutton(root, text点击进行操作, reliefsunk) # 设置位置布局 menubtn.grid(padx195, pady105) # 添加菜单,使用 tearoff 参数不显示分割线 filemenu tk.Menu(menubtn, tearoffFalse) filemenu.add_command(label新建) filemenu.add_command(label删除) filemenu.add_command(label复制) filemenu.add_command(label保存) # 显示菜单将菜单命令绑定在菜单按钮对象上 menubtn.config(menufilemenu)# 显示窗口 root.mainloop() Tkinter Scrollbar滚动条控件 Scrollbar 控件常用于创建一个水平或者垂直的滚动条通常情况下Scrollbar 控件可以与 Listbox、Text、Canvas 以及 Entry 等控件一起使。 滚动条控件是 GUI 程序中经常使用的一种控件类型它主要用来控制控件区域的可见范围比如当 Text 控件的文本内容非常多时为了方便用户阅读可以给 Text 控件增加滚动条用户只需拖动滚动条就能完成内容的阅读。 Scrollbar 控件的常用属性如下表所示 属性说明activebackground指定当鼠标在上方飘过的时候滑块和箭头的背景颜色默认由系统决定activerelief指定当鼠标在滑块上方飘过时滑块的样式默认值是 raised其他可选值有 flatsunkengrooveridgebackground(bg)指定背景颜色默认值由系统指定borderwidth(bd)指定边框宽度默认值是 0command当滚动条更新时回调的函数通常指定对应组件的 xview() 或 yview() 方法cursor指定当鼠标在上方飘过的时的鼠标样式默认值由系统指定elementborderwidth1. 指定滚动条和箭头的边框宽度 2. 默认值是 -1表示使用 borderwidth 选项的值jump1. 指定当用户拖拽滚动条时的行为 2. 默认值为 False滚动条的任何一丝变动都会即刻调用 command 指定的回调函数 3. 设置为 True 则当用户松开鼠标才调用orient指定绘制 horizontal垂直滚动条还是 vertical水平滚动条默认值是 VERTICALrepeatdelay该选项指定鼠标左键点击滚动条凹槽的响应时间默认值是 300毫秒repeatinterval该选项指定鼠标左键紧按滚动条凹槽时的响应间隔默认值是 100毫秒takefocus指定使用 Tab 键可以将焦点移到该 Scrollbar 组件上默认为开启可以将该选项设置为 False 避免焦点在此组件上troughcolor指定凹槽的颜色默认由系统指定width指定滚动条的宽度,默认值是 16px 下面是介绍了 Scrollbar 控件常用的函数 属性说明activate(element) 1. 显示 element 参数指定的元素的背景颜色和样式; 2. element 参数可以设置为arrow1箭头1arrow2箭头2或 slider滑块delta(deltax, deltay)1. 给定一个鼠标移动的范围 deltax 和 deltay然后该方法返回一个浮点类型的值范围 -1.0 ~ 1.0 2. 注意deltax 表示水平移动量deltay 表示垂直移动量fraction(x, y)给定一个像素坐标 (x, y)该方法返回最接近给定坐标的滚动条位置。get() 返回当前滑块的位置 (a, b)其中 a 值表示当前滑块的顶端或左端的位置b 值表示当前滑块的底端或右端的位置。identify(x, y)1. 返回一个字符串表示指定位置下如果有的话的滚动条部件 2. 返回值可以是arrow1箭头1arrow2箭头2、slider滑块或 空set(*args)1. 设置当前滚动条的位置 2. 该方法有两个参数即 (first, last)其中 first 表示当前滑块的顶端或左端的位置last 表示当前滑块的底端或右端的位置范围 0.0 ~ 1.0 滚动条示例 # 第三十五章节Tkinter Scrollbar import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTHroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 创建一个滚动条控件默认为垂直方向 sbar1tk.Scrollbar(root) # 将滚动条放置在右侧并设置当窗口大小改变时滚动条会沿着垂直方向延展 sbar1.pack(sideRIGHT, fillY) # 创建水平滚动条默认为水平方向,当拖动窗口时会沿着X轴方向填充 sbar2 tk.Scrollbar(root, orientHORIZONTAL) sbar2.pack(sideBOTTOM, fillX) # 创建列表框控件,并添加两个滚动条分别在垂直和水平方向使用 set() 进行设置 mylist tk.Listbox(root, xscrollcommandsbar2.set, yscrollcommandsbar1.set) for i in range(30):mylist.insert(END, 第 str(i1)次:\n) # 当窗口改变大小时会在X与Y方向填满窗口 mylist.pack(sideLEFT, fillBOTH) # 使用 command 关联控件的 yview、xview方法 sbar1.config(commandmylist.yview) sbar2.config(commandmylist.xview)# 显示窗口 root.mainloop() 通过滑动滚动条可以浏览列表框中的内容垂直方向的滚动条沿着上下浏览水平方向的滚动条则沿着左右方向浏览。 Tkinter Event事件处理 事件处理是 GUI 程序中不可或缺的重要组成部分相比来说控件只是组成一台机器的零部件 而事件处理则是驱动这台机器“正常”运转的关键所在它能够将零部件之间“优雅”的贯穿起来因此“事件处理”可谓是 GUI 程序的“灵魂”同时它也是实现人机交互的关键。 在一款 GUI 程序中我们将用户对软件的操作统称为“事件”比如鼠标点击按钮、键盘输入文本以及窗口管理器触发的重绘事件等这些事件有一个共同的特点即都是由用户自身直接或者间接触发的。 事件绑定方法 Tkinter 提供的事件处理机制允许我们为“控件”绑定相应的事件和事件处理函数即 callback函数从而实现控件与用户的交互其语法格式如下 widget.bind(event,func) 上述语法中widget 代表控件的实例对象之后采用 bind() 方法进行事件绑定该函数有两个参数 event一个字符串参数表示事件的类型并使用“尖括号”的形式进行包裹func表示事件的处理函数callback即回调函数当触发事件时Tk 会携带事件对象Event去调用 func 方法。 注意bind() 方法可以完成事件与处理函数绑定而使用 unbind() 方法可以将事件与处理函数解绑。 常用事件类型 事件类型也称事件码是 Tkinter 模块规定的主要包括鼠标、键盘、光标等相关事件Tkinter 为其规定了相应的语法格式 modifier-type-detail 上述语法由三部分组成说明如下 事件类型必须包含在“尖括号”内modifier可选项事件类型的修饰符通常用于描述组合键、双击Double-Button-1、大写锁定键Lock以及Alt-Shift等type是必不可少的一项表示事件的具体类型detail可选项通常用于描述具体的哪个按键比如 Button-1 表示鼠标左键 对经常使用的 modifier 修饰符做简单的介绍修饰符限制事件的激活条件比如双击鼠标或者需要同时按下某个键才触发事件常用的修饰符如下  修饰符说明Control事件发生时需按下 Control 键Alt事件发生时需按下 Alt 键Shift事件发生时需按下 Shift 键Lock事件发生时需处于大写锁定状态Double事件连续发生两次比如双击鼠标Triple事件连续发生三次Quadruple事件连续发生四次 下述表格中介绍了 Tkinter 中经常使用的事件类型如下所示 事件码说明ButtonPress-1单击鼠标左键简写为Button-1后面的数字可以是1/2/3分别代表左键、中间滑轮、右键ButtonRelease-1释放鼠标左键后面数字可以是1/2/3分别代表释放左键、滑轮、右键B1-Motion按住鼠标左键移动B2-Motion和B3-Motion分别表示按住鼠标滑轮移动、右键移动MouseWheel转动鼠标滑轮Double-Button-1双击鼠标左键Enter鼠标光标进入控件实例Leave鼠标光标离开控件实例Key按下键盘上的任意键KeyPress-字母/KeyPress-数字按下键盘上的某一个字母或者数字键KeyRelease释放键盘上的按键Return回车键其他同类型键有Shift/Tab/Control/AltSpace空格键UP/Down/Left/Right方向键F1...F12常用的功能键Control-Alt组合键再比如Control-Shift-KeyPress-T表示用户同时点击 Ctrl Shift TFocusIn当控件获取焦点时候触发比如鼠标点击输入控件输入内容可以调用 focus_set() 方法使控件获得焦点FocusOut当控件失去焦点时激活比如当鼠标离开输入框的时候Configure 控件的发生改变的时候触发事件比如调整了控件的大小等Deactivate当控件的状态从“激活”变为“未激活”时触发事件Destroy当控件被销毁的时候触发执行事件的函数Expose当窗口或组件的某部分不再被覆盖的时候触发事件Visibility当应用程序至少有一部分在屏幕中是可见状态时触发事件 Event事件对象 当事件触发后Tkinter 会自动将事件对象交给回调函数进行下步的处理Event 对象包含了以下常用属性 属性说明widget发生事件的是哪一个控件x,y相对于窗口的左上角而言当前鼠标的坐标位置x_root,y_root相对于屏幕的左上角而言当前鼠标的坐标位置char用来显示所按键相对应的字符keysym按键名比如 Control_L 表示左边的 Ctrl 按键keycode按键码一个按键的数字编号比如 Delete 按键码是107num1/2/3中的一个表示点击了鼠标的哪个按键按键分为左、中、右width,height控件的修改后的尺寸对应着 Configure事件type事件类型 # 第三十五章节Tkinter 事件绑定 import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTHroot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)# 定义事件函数必须用event参数 def show_key(event):# 查看触发事件的按钮sevent.keysym# 将其显示在按钮控件上lb.config(texts)# 添加一个按钮控件 lb tk.Label(root, text请按键, fgblue, font(微软雅黑, 15)) # 给按钮控件绑定事件按下任意键然后调用事件处理函数。注意此处需要在英文状态下进行输入 lb.bind(Key, show_key) # 设置按钮获取焦点 lb.focus_set() lb.pack()# 显示窗口 root.mainloop() 温馨提示在上述示例中只有当 Label 控件获取焦点后才能接收键盘事件因此在给控件绑定事件和回调函数后需要使用 focus_set() 方法来获取焦点。 鼠标事件示例 # 第三十五章节Tkinter 事件绑定鼠标事件 import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOProot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)def handleMotion(event):lb1[text] 你移动了光标的所在位置lb2[text] 目前光标位置x str(event.x) ;y str(event.y)print(光标当前位置, event.x, event.y)# 创建一个窗体容器frame frame tk.Frame(root, reliefRAISED, borderwidth2, width300, height200) frame.bind(Motion, handleMotion) lb1 tk.Label(frame, text没有任何事件触发, bgpurple, ) # 使用place进行位置布局下一节会介绍 lb1.place(x20, y20) lb2 tk.Label(frame, text) lb2.place(x16, y60) frame.pack(sideTOP)# 显示窗口 root.mainloop() Tkinter布局管理器 当我们在开发一个 GUI 程序的时候布局管理发挥着非常重要的作用它指的是通过管理控件在窗口中的位置排版从而实现对窗口和控件布局的目的。 Tkinter 提供了一系列布局管理的方法和容器控件通过对这些内容的学习您将掌握如何使用不同的方法完成界面布局。 Tkinter 提供了三种常用的布局管理器分别是 pack()、grid() 以及 place()如下表所示 方法说明pack()按照控件的添加顺序其进行排列遗憾的是此方法灵活性较差grid()以行和列网格形式对控件进行排列此种方法使用起来较为灵活place()可以指定组件大小以及摆放位置三个方法中最为灵活的布局方法 pack() pack() 是一种较为简单的布局方法在不使用任何参数的情况下它会将控件以添加时的先后顺序自上而下一行一行的进行排列并且默认居中显示。pack() 方法的常用参数如下所示   属性说明anchor组件在窗口中的对齐方式有 9 个方位参数值比如n/w/s/e/ne以及 center 等这里的 e w s n分别代表东西南北expand是否可扩展窗口参数值为 True扩展或者 False不扩展默认为 False若设置为 True则控件的位置始终位于窗口的中央位置fill参数值为 X/Y/BOTH/NONE表示允许控件在水平/垂直/同时在两个方向上进行拉伸比如当 fill X 时控件会占满水平方向上的所有剩余的空间。ipadx,ipady需要与 fill 参数值共同使用表示组件与内容和组件边框的距离内边距比如文本内容和组件边框的距离单位为像素(p)或者厘米(c)、英寸(i)padx,pady用于控制组件之间的上下、左右的距离外边距单位为像素(p)或者厘米(c)、英寸(i)side组件放置在窗口的哪个位置上参数值 top,bottom,left,right。注意单词小写时需要使用字符串格式若为大写单词则不必使用字符串格式 pack 方法示例 # 第三十六章节Tkinter 布局pack import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOProot tk.Tk() root.title(Tkinter Text) root.geometry(450x150100100) root.resizable(0, 0)def handleMotion(event):lb1[text] 你移动了光标的所在位置lb2[text] 目前光标位置x str(event.x) ;y str(event.y)print(光标当前位置, event.x, event.y)# 创建一个窗体容器frame frame tk.Frame(root, reliefRAISED, borderwidth2, width300, height200) frame.bind(Motion, handleMotion) lb1 tk.Label(frame, text没有任何事件触发, bgpurple, ) # 使用place进行位置布局下一节会介绍 lb1.place(x20, y20) lb2 tk.Label(frame, text) lb2.place(x16, y60) frame.pack(sideTOP)# 显示窗口 root.mainloop() grid() grid() 函数是一种基于网格式的布局管理方法相当于把窗口看成了一张由行和列组成的表格。当使用该 grid 函数进行布局的时表格内的每个单元格都可以放置一个控件。从而实现对界面的布局管理。 注意这里的所说的“表格”是虚拟出来目的是便于大家理解其实窗体并不会因为使用了 gird() 函数而增加一个表格。 grid() 函数的常用参数如下所示 属性说明column控件位于表格中的第几列窗体最左边的为起始列默认为第 0 列columnsapn控件实例所跨的列数默认为 1 列通过该参数可以合并一行中多个领近单元格。ipadx,ipady用于控制内边距在单元格内部左右、上下方向上填充指定大小的空间。padx,pady用于控制外边距在单元格外部左右、上下方向上填充指定大小的空间。row控件位于表格中的第几行窗体最上面为起始行默认为第 0 行rowspan控件实例所跨的行数默认为 1 行通过该参数可以合并一列中多个领近单元格。sticky该属性用来设置控件位于单元格那个方位上参数值和 anchor 相同若不设置该参数则控件在单元格内居中 grid() 方法相比 pack() 方法来说要更加灵活以网格的方式对组件进行布局管理让整个布局显得非常简洁、优雅。如果说非要从三个布局管理器中选择一个使用的话那么我推荐大家使用 grid() 方法。 温馨提示在一个容器中不能同时使用 pack() 和 grid() 方法这两个方法只能二选一否则程序会运行错误。 grid 方法简单示例 # 第三十六章节Tkinter 布局grid import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOProot tk.Tk() root.title(Tkinter Text) root.geometry(450x350100100) root.resizable(0, 0)# 在窗口内创建按钮以表格的形式依次排列 for i in range(10):for j in range(10):tk.Button(root, text ( str(i) , str(j) ), bg#D1EEEE).grid(rowi, columnj)# 显示窗口 root.mainloop() 当使用 grid 函数布局的时其实就是为各个控件指定行号、列号的过程我们不需要为每个单元格指定大小因为 grid 会为每个单元格自动设置一个适合的尺寸。 place() 与前两种布局方法相比采用 place() 方法进行布局管理要更加精细化通过 place() 布局管理器可以直接指定控件在窗体内的绝对位置或者相对于其他控件定位的相对位置。 下面对 place 布局管理器的常用属性做相关介绍 属性说明anchor定义控件在窗体内的方位参数值N/NE/E/SE/S/SW/W/NW 或 CENTER默认值是 NWbordermode定义控件的坐标是否要考虑边界的宽度参数值为 OUTSIDE排除边界 或 INSIDE包含边界默认值 INSIDE。x、y定义控件在根窗体中水平和垂直方向上的起始绝对位置relx、rely1. 定义控件相对于根窗口或其他控件在水平和垂直方向上的相对位置即位移比例取值范围再 0.0~1.0 之间 2. 可设置 in_ 参数项相对于某个其他控件的位置height、width控件自身的高度和宽度单位为像素relheight、relwidth控件高度和宽度相对于根窗体高度和宽度的比例取值也在 0.0~1.0 之间 通过上述描述我们知道relx和rely参数指定的是控件相对于父组件的位置而relwidth和relheight参数则是指定控件相对于父组件的尺寸大小。 注意这里父组件指的是当前可操作控件的上层组件比如在没有使用容器控件frame的窗体中控件的父组件就是主窗口本身在《Tkinter布局管理容器控件》一节会做针对性介绍。 place 方法示例 # 第三十六章节Tkinter 布局place import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOP, SUNKEN, NEroot tk.Tk() root.title(Tkinter Text) root.geometry(450x350) root.resizable(0, 0)# 创建一个frame窗体对象用来包裹标签 frame tk.Frame(root, reliefSUNKEN, borderwidth2, width450, height250) # 在水平、垂直方向上填充窗体 frame.pack(sideTOP, fillBOTH, expand1) # 创建 位置1 Label1 tk.Label(frame, text位置1, bgblue, fgwhite) # 使用 place,设置第一个标签位于距离窗体左上角的位置40,40和其大小widthheight # 注意这里x,y位置坐标指的是标签左上角的位置以NW左上角进行绝对定位默认为NW Label1.place(x40, y40, width60, height30) # 设置标签2 Label2 tk.Label(frame, text位置2, bgpurple, fgwhite) # 以右上角进行绝对值定位anchorNE第二个标签的位置在距离窗体左上角的(18080) Label2.place(x180, y80, anchorNE, width60, height30) # 设置标签3 Label3 tk.Label(frame, text位置3, bggreen, fgwhite) # 设置水平起始位置相对于窗体水平距离的0.6倍垂直的绝对距离为80大小为6030 Label3.place(relx0.6, y80, width60, height30) # 设置标签4 Label4 tk.Label(frame, text位置4, bggray, fgwhite) # 设置水平起始位置相对于窗体水平距离的0.01倍垂直的绝对距离为80并设置高度为窗体高度比例的0.5倍宽度为80 Label4.place(relx0.01, y80, relheight0.4, width80)# 显示窗口 root.mainloop() Tkinter布局管理控件 除了上一节《Tkinter布局管理方法》中提到的三个常用方法外Tkinter  还提供了几个常用的布局管理控件比如 Frame 、LabelFrame 等这些控件的主要作用是为其他控件提供载体并将主窗口界面划分成多个区域从而方便开发者对不同区域进行设计与管理。 在前文讲解其他的 Tkinter 控件时我们列举的大多数示例都是将控件直接放置在主窗口即根窗口内这样做的目的是为了便于大家理解。但在实际的开发过程中控件一般放置在容器中比如 Frame 容器控件如同 HTML 中的div标签一样把容器看做成一个框架其他控件则是这个框架中的“元素”。 本节介绍了四种常用的容器控件以及它们的使用方法分别是 Frame、LabelFrame、PanedWindow 以及 Toplevel。 Frame控件 Frame 本质上也是一个矩形窗体同其他控件一样也需要位于主窗口内。我们可以在主窗口内放置多个 Frame 控件并且每个 Frame 中还可以嵌套一个或者多个Frame从而将主窗口界面划分成多个区域。 Frame 控件的常用属性如下表所示 属性说明bg设置 Frame 的背景颜色bd指定 Frame 的边框宽度colormap指定  Frame 组件及其子组件的颜色映射container布尔值参数若参数值为 True则窗体将被用作容器使用一些其他程序也可以被嵌入。cursor指定鼠标在 Frame 上飘过的鼠标样式默认由系统指定height/width设置 Frame 的高度和宽度highlightbackground指定当 Frame 没有获得焦点的时候高亮边框的颜色通常由系统指定为标准颜色highlightcolor指定当 Frame 获得焦点的时候高亮边框的颜色highlightthickness指定高亮边框的宽度默认值是 0padx/pady距离主窗口在水平/垂直方向上的外边距relief指定边框的样式参数值 sunkenraisedgroove 或 ridgeflat默认为 falttakefocus布尔值参数默认为 False指定该组件是否接受输入焦点即用户通过 Tab 键将焦点转移上来 Frame控件 示例 # 第三十六章节Tkinter 布局控件Frame import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOP, SUNKEN, NEroot tk.Tk() root.title(Tkinter Text) root.geometry(450x350) root.resizable(0, 0)# 在主窗口上添加一个frame控件 frame1 tk.Frame(root) frame1.pack() # 在frame_1上添加另外两个frame 一个在靠左一个靠右 # 左侧的frame frame_left tk.Frame(frame1) tk.Label(frame_left, text左侧标签1, bggreen, width10, height5).grid(row0, column0) tk.Label(frame_left, text左侧标签2, bgblue, width10, height5).grid(row1, column1) frame_left.pack(sidetk.LEFT) frame_right tk.Frame(frame1) tk.Label(frame_right, text右侧标签1, bggray, width10, height5).grid(row0, column1) tk.Label(frame_right, text右侧标签2, bgpink, width10, height5).grid(row1, column0) tk.Label(frame_right, text右侧标签3, bgpurple, width10, height5).grid(row1, column1) frame_right.pack(sidetk.RIGHT)# 显示窗口 root.mainloop() LabelFrame控件 LabelFrame 控件也是一种容器类型的控件它属于是 Frame 控件的变体因此它们的属性选项大体相同。 在默认情况下LabelFrame 会在其包裹的子组件周围绘制一个边框和一个标题。当我们想要将一些相关的组件分为一组时就可以使用 LabelFrame 组件比如把一系列 Radiobutton单选按钮放在一起来供用户选择。 LabelFrame 控件示例 # 第三十六章节Tkinter 布局控件LabelFrame import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOP, SUNKEN, NEroot tk.Tk() root.title(Tkinter Text) root.geometry(450x450) root.resizable(0, 0)# 定义第一个容器使用 labelanchor w 来设置标题的方位 frame_left tk.LabelFrame(root, text教程, labelanchorw, bg#5CACEE) # 使用 place 控制 LabelFrame 的位置 frame_left.place(relx0.2, rely0.2, relwidth0.2, relheight0.5) label_1 tk.Label(frame_left, textC语言) label_1.place(relx0.2, rely0.2) label_2 tk.Label(frame_left, textPython) label_2.place(relx0.6, rely0.2) label_3 tk.Label(frame_left, textJava) label_3.place(relx0.2, rely0.6) label_4 tk.Label(frame_left, textC) label_4.place(relx0.6, rely0.6) # 定义第二个容器使用 labelanchor w 来设置标题的方位 frame_right tk.LabelFrame(root, text辅导班, labelanchorw, bg#66CDAA) # 使用 place 控制 LabelFrame 的位置 frame_right.place(relx0.5, rely0.2, relwidth0.3, relheight0.6) label_1 tk.Label(frame_right, textC语言辅导班) label_1.place(relx0.2, rely0.2) label_2 tk.Label(frame_right, text数据结构) label_2.place(relx0.6, rely0.2) label_3 tk.Label(frame_right, textC辅导班) label_3.place(relx0.2, rely0.6) label_4 tk.Label(frame_right, textPython答疑) label_4.place(relx0.6, rely0.6)# 显示窗口 root.mainloop() PanedWindow控件 PanedWindow窗格界面也可以理解成一个特殊的 Frame 控件它是 Tkinter 8.4 版本后新增的空间管理组件其主要目的是为其他组件提供一个容器或者框架从而实现以分块的形式对图形界面进行布局。 与 Frame 控件不同 PanedWindow 允许用户自主地调整界面划分以及每块区域的大小。因此当您需要让用户自己调节每块区域的大小时就可以采用 PanedWindow 作为组件载体来进行界面的布局。 不仅如此 PanedWindow 组件还提供了“手柄” 功能设置参数 showhandleTrue 来启用通过拖动“手柄”图标也可以改变每块区域的大小。PanedWindow 组件语法格式如下所示 PanedWindow(masterNone, **options) 其中 master 表示父组件即包裹该组件的上层组件。其常用属性如下表所示 属性说明handlepad1. 调节“手柄”的位置 2. 比如当 orient vertical 设置垂直时handlepad 表示“分割线”上的手柄与左端的距离默认为 8 像素handlesize设置“手柄”的尺寸由于“手柄”必须是一个正方形所以是设置正方形的边长默认为 8 像素opaqueresize1. 该选项定义了用户调整窗格尺寸的操作如果该选项的值为 True默认窗格的尺寸随用户鼠标的拖拽而改变 2.  如果该选项的值为 False那么窗格的尺寸在用户释放鼠标时才会更新到新的位置上orient指定窗格的分布方式默认为水平方向分布horizontal或者还可以设置为垂直纵向分布verticalrelif指定边框的样式默认为 flat还可以设置为  sunkenraisedgroove 或 ridgesashpad设置每一条分割线到窗格间的间距sashrelief设置分割线的样式默认值是flat还可以设置 sunkenraisedgroove 或 ridgesashwidth设置分割线的宽度showhandle设置是否显示调节窗格的手柄默认为 Falseheight/width设置 PanedWindow 的高度、宽度若不设置则其大小由其子组件的尺寸决定 PanedWindow 的常用方法如下表所示 方法说明add(child)添加一个新的子组件到窗格中语法格式 add(child,**option)参数值 after、before、stickyforget(child)删除一个子组件panecget(child, option)获得子组件指定选项的值paneconfig(child, **options)设置子组件的各种选项panes()将父组件中包含的子组件以列表的形式返回sash_coord(index)返回一个二元组表示指定分割线的起点坐标sash_place(index, x, y)将指定的分割线移动到一个新的位置 PanedWindow 控件示例 : # 第三十六章节Tkinter 布局控件PanedWindow import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOP, SUNKEN, NEroot tk.Tk() root.title(Tkinter Text) root.geometry(450x450) root.resizable(0, 0)# 创建一个水平方向的 panedwindow并添加到主窗口中默认为水平方向 p_window1 tk.PanedWindow(root) p_window1.pack(filltk.BOTH, expand1) # 在窗口区的左侧添加两个水平方向的 Label left1 tk.Label(p_window1, textC语言中文网, bg#7CCD7C, width10, font(微软雅黑, 15)) p_window1.add(left1) left2 tk.Label(p_window1, textCSDN, bg#9AC0CD, width10, font(微软雅黑, 15)) p_window1.add(left2) # 创建一个垂直方向的panedwindow,并添加一个手柄设置分割线样式 p_window2 tk.PanedWindow(orienttk.VERTICAL, showhandleTrue, sashreliefsunken) # 添加到 p_window1中 p_window1.add(p_window2) # 在 p_window2 中添加两个垂直方向的标签 top_label tk.Label(p_window2, textJava教程, bg#7171C6, height8, font(宋体, 15)) p_window2.add(top_label) bottom_label tk.Label(p_window2, text辅导班, bg#8968CD, font(宋体, 15)) p_window2.add(bottom_label)# 显示窗口 root.mainloop() Toplevel控件 Topleve 是一个顶级窗口控件也被称为“子窗体”控件同样类似于 Frame 控件 不过该控件会脱离根窗口另行创建一个独立窗口因此它的存在形式不同于上述其他容器。 Toplevel 控件同样隶属于主窗口的子组件只是存在形式特殊而已。Toplevel 是主窗口之外的弹出框窗口通过事件来触发执行在这个窗口内也可以包含其他组件。但需要注意顶级窗口并不是必须位于窗口的顶部位置之所以称其为顶级窗口是因为相对于主窗口而言Topleve 位于主窗口的上一层。 Toplevel 控件拥有根窗口控件的所有方法和属性同时它还拥有一些独有的方法如下表所示 方法说明deiconify()在使用 iconify() 或 withdraw() 方法后即窗口最小化和移除窗口后只是看不见并没销毁使用该方法来显示该窗口frame()返回一个系统特定的窗口识别码group(window)将顶级窗口加入 window 窗口群组中如果忽略该参数将返回当前窗口群的主窗口 iconify()将窗口图标化最小化需要重新显示窗口使用 deiconify() 方法 protocol(name, function)将回调函数 function 与相应的规则 name 绑定 1) name 参数可以是 WM_DELETE_WINDOW窗口被关闭的时候 2) name 参数可以是 WM_SAVE_YOURSELF窗口被保存的时候 3) name 参数可以是 WM_TAKE_FOCUS窗口获得焦点的时候。 state()设置和获得当前窗口的状态参数值 normal正常状态withdrawn移除窗口icon最小化和 zoomed放大transient(master)指定为 master 的临时窗口withdraw()将窗口从屏幕上移除只是移动到了窗口之外并没销毁需要重新显示窗口使用 deiconify() 方法 Toplevel 控件示例  # 第三十六章节Tkinter 布局控件Toplevel import tkinter as tk from tkinter import messagebox, INSERT, END, ttk, LEFT, BOTTOM, X, RIGHT, Y, HORIZONTAL, BOTH, RAISED, TOP, SUNKEN, NEroot tk.Tk() root.title(Tkinter 控件) root.geometry(450x450) root.resizable(0, 0)def create_toplevel():top tk.Toplevel()top.title(Tkinter Toplevel)top.geometry(300x200100100)# 多行文本显示Message控件msg tk.Label(top, textwww.google.com, bg#9BCD9B, font(宋体, 15))msg.pack()tk.Button(root, text点击创建Toplevel组件, width20, height3, commandcreate_toplevel).pack()# 显示窗口 root.mainloop() Tkinter对话框控件 除了基本的控件之外Tkinter 还提供了三种对话框控件 文件选择对话框filedailog颜色选择对话框colorchooser消息对话框messagebox 文件选择对话框 文件对话框在 GUI 程序中经常的使用到比如上传文档需要从本地选择一个文件包括文件的打开和保存功能都需要一个文件对话框来实现。Tkinter 提供文件对话框被封装在tkinter.filedailog模块中该模块提供了有关文件对话框的常用函数经常使用的有以下几个 方法说明Open()打开个某个文件SaveAs()打开一个保存文件的对话框askopenfilename()打开某个文件并以包函文件名的路径作为返回值askopenfilenames()同时打开多个文件并以元组形式返回多个文件名askopenfile()打开文件并返回文件流对象askopenfiles()打开多个文件并以列表形式返回多个文件流对象asksaveasfilename()选择以什么文件名保存文件并返回文件名asksaveasfile()选择以什么类型保存文件并返回文件流对象askdirectory选择目录并返回目录名 上述方法的常用参数值如下所示 参数说明defaultextension指定文件的后缀名当保存文件时自动添加文件名如果自动添加了文件的后缀名则该选项值不会生效filetypes指定筛选文件类型的下拉菜单选项该选项值是由 2 元祖构成的列表其中每个二元祖由两部分组成 (类型名,后缀)比如 filetypes [(PNG,*.png), (JPG, *.jpg), (GIF,*.gif),(文本文件,*.txt)...] initialdir指定打开/保存文件的默认路径默认路径是当前文件夹parent 如果不指定该选项那么对话框默认显示在根窗口上通过设置该参数可以使得对话框显示在子窗口上title指定文件对话框的标题 文件选择对话框示例 # 第三十六章节Tkinter 文件选择对话框import tkinter as tk from tkinter import RAISED, filedialogroot tk.Tk() root.title(Tkinter 控件) root.geometry(450x450) root.resizable(0, 0)# 定义一个处理文件的相关函数 def askfile():# 从本地选择一个文件并返回文件的目录filename filedialog.askopenfilename()if filename ! :lb.config(textfilename)else:lb.config(text您没有选择任何文件)btn tk.Button(root, text选择文件, reliefRAISED, commandaskfile) btn.grid(row0, column0) lb tk.Label(root, text, bg#87CEEB) lb.grid(row0, column1, padx5) # 显示窗口 root.mainloop() 保存文件示例 # 第三十六章节Tkinter 文件选择对话框之文件保存import tkinter as tk from tkinter import RAISED, filedialog from PIL import Imageroot tk.Tk() root.title(Tkinter 控件) root.geometry(450x450) root.resizable(0, 0)def open_img():try:global imgfilepath filedialog.askopenfilename() # 打开文件返回该文件的完整路径filename.set(filepath)img Image.open(filename.get())except Exception as e:print(您没有选择任何文件, e)def save_png():try:filetypes [(PNG, *.png), (JPG, *.jpg), (GIF, *.gif),(txt files, *.txt), (All files, *)]# 返回一个 pathname 文件路径字符串如果取消或者关闭则返回空字符返回文件如何操作是后续代码的事情# 该函数知识返回选择文件的文件名字不具备保存文件的能力filenewpath filedialog.asksaveasfilename(title保存文件, filetypesfiletypes, defaultextension.png, initialdirC:/Users/Administrator/Desktop)path_var.set(filenewpath)# 保存文件img.save(str(path_var.get()))except Exception as e:print(e)filename tk.StringVar() path_var tk.StringVar() # 定义读取文件的组件 entry tk.Entry(root, textvariablefilename) entry.grid(row1, column0, padx5, pady5) tk.Button(root, text选择文件, commandopen_img).grid(row1, column1, padx5, pady5) # 定义保存文件的组件 entry1 tk.Entry(root, textvariablepath_var) entry1.grid(row2, column0, padx5, pady5) tk.Button(root, text保存文件, commandsave_png).grid(row2, column1, padx5, pady5)# 显示窗口 root.mainloop() 颜色选择对话框 颜色选择对话框colorchooser提供了一个非常友善的颜色面板它允许用户选择自己所需要的颜色。 当用户在面板上选择一个颜色并按下“确定”按钮后它会返回一个二元祖其第 1 个元素是选择的 RGB 颜色值第 2 个元素是对应的 16 进制颜色值。 颜色选择对话款主要应用在画笔、涂鸦等功能上通过它可以绘制出五彩缤纷的颜色该对话框的使用非常简单主要有以下两个常用方法 方法说明askcolor()打开一个颜色对话框并将用户选择的颜色值以元组的形式返回没选择返回None格式为((R, G, B), #rrggbb)Chooser()打开一个颜色对话框并用户选择颜色确定后返回一个二元组格式为(R, G, B), #rrggbb 常用的颜色对话框的参数值如下表所示 属性说明default要显示的初始的颜色默认颜色是浅灰色light graytitle指定颜色选择器标题栏的文本默认标题为“颜色”parent1. 如果不指定该选项那么对话框默认显示在根窗口上 2. 如果想要将对话框显示在子窗口上那么可以设置 parent 子窗口对象 颜色对话框示例: # 第三十六章节Tkinter 颜色对话框 import tkinter as tk from tkinter import RAISED, filedialog, colorchooserroot tk.Tk() root.title(Tkinter 控件) root.geometry(450x450) root.resizable(0, 0)def callback():# 打开颜色对话款colorvalue colorchooser.askcolor()# 在颜色面板点击确定后会在窗口显示二元组颜色值lb.config(text颜色值: str(colorvalue))lbtk.Label(root, text, font(宋体, 10)) # 将label标签放置在主窗口 lb.pack() tk.Button(root, text点击选择颜色, commandcallback, width10, bg#9AC0CD).pack()# 显示窗口 root.mainloop() 消息对话框 关于消息对话款messagebox在前面介绍其他控件时已经使用过在本节仅对它做简单介绍。 消息对话框主要起到信息提示、警告、说明、询问等作用通常配合“事件函数”一起使用比如执行某个操作出现了错误然后弹出错误消息提示框。通过使用消息对话框可以提升用户的交互体验也使得 GUI 程序更加人性化。消息对话框主要包含了以下常用方法 方法说明askokcancel(titleNone, messageNone)打开一个“确定取消”的对话框askquestion(titleNone, messageNone)打开一个“是否”的对话框。askretrycancel(titleNone, messageNone)打开一个“重试取消”的对话框askyesno(titleNone, messageNone)打开一个“是否”的对话框showerror(titleNone, messageNone)打开一个错误提示对话框showinfo(titleNone, messageNone)打开一个信息提示对话框showwarning(titleNone, messageNone)打开一个警告提示对话框 上述方法拥有相同的选项参数如下表所示 属性说明default1. 设置默认的按钮也就是按下回车响应的那个按钮 2. 默认是第一个按钮像“确定”“是”或“重试” 3. 可以设置的值根据对话框函数的不同可以选择 CANCELIGNOREOKNORETRY 或 YESicon1. 指定对话框显示的图标 2. 可以指定的值有ERRORINFOQUESTION 或 WARNING 3. 注意不能指定自己的图标parent1. 如果不指定该选项那么对话框默认显示在根窗口上 2. 如果想要将对话框显示在子窗口上那么可以设置 parent 子窗口对象 上述方法的返回值一般会是一个布尔值或者是“YES”“NO”“OK”等这些方法使用较为简单此处不进行逐一列举看个简单的示例即可 # 第三十六章节Tkinter 消息对话框 import tkinter as tk from tkinter import RAISED, filedialog, colorchooserroot tk.Tk() root.title(Tkinter 控件) root.geometry(450x450) root.resizable(0, 0)def callMessageDialog():result tk.messagebox.askokcancel(提示, 你确定要关闭窗口吗? )# 返回布尔值参数print(result)tk.Button(root, text点击消息对话框, commandcallMessageDialog, width10, bg#9AC0CD).pack()# 显示窗口 root.mainloop() 本文参考:Tkinter 教程
http://www.pierceye.com/news/914752/

相关文章:

  • 全屏网站代码佛山专业网站建设公司推荐
  • 自己做信息网站有什么设计网站
  • 检察网站建设请示wordpress 重定向多
  • 做网站用什么服务器比较好线上推广网络公司
  • 长春营销型网站制作内蒙古建设部网站官网
  • 做家教的网站微网站可以自己做吗
  • 网站优化新闻关键词挖掘工具爱网
  • 研究生院 网站 建设广州网站建设策划
  • 企业建站找哪个公司网站退出率
  • 汕头企业建站系统高密微网站建设
  • 企业建设网站个人总结报告中山蓝图科技网站建设
  • 网站规划作品邯郸免费发布信息平台
  • html5手机网站源码网站备案要如何取消
  • 商城建设网站制作微信网站模板源码
  • 品牌型网站制作公司想做百度推广找谁
  • 浙江建设监理协会官方网站网站建设的公司选择哪家好
  • 优秀网站及网址沙漠风网站建设6
  • 做数据表格的网站出口网站建设方案
  • 广州网站建设信息科技有限公司福建省亿力电力建设有限公司网站
  • 电子商务网站开发 ppt湛江做网站报价
  • 网站建设框架图wordpress 固定链接设置
  • 内蒙古工程建设协会网站seo文章外包
  • 网站建设免费的服务器商丘推广公司
  • 网站设计大概价格设计网络平台的公司
  • phpcms中的网站介绍页中文去掉wordpress
  • 网站的建设心得怎么做网站淘宝转换工具
  • 做网站1天转多钱wordpress 分享插件
  • 淘宝网站建设单子好接吗朝阳区办公
  • html5网站建设平台怎么给网站添加图标
  • 中文域名网站网站制作wap页面