tkinter 第二章 标签Label
第二章 标签LabelLabel标签控件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或者sunken”state该参数用来指定 Lable 的状态默认值为normal正常状态其他可选参数值有active和disabledtakefocus默认值为False如果是 True表示该标签接受输入焦点text用来指定 Lable 显示的文本注意文本内可以包含换行符underline给指定的字符添加下划线默认值为-1 表示不添加当设置为1 时表示给第二个文本字符添加下划线。wraplength将 Label 显示的文本分行该参数指定了分行后每一行的长度默认值为0Label控件构成一个控件主要由背景和前景两部分组成。其中背景由三部分构成分别是内容区域、填充区、边框这三个区域的大小通过以下属性进行控制width/heightpadx/padyborderwidth边框的宽度可以通过 borderwidth 来调整其样式可以通过relief来设置默认为平的 flat填充区的大小调整分为水平方向和垂直方向可以使用padx和pady来调整内容区则主要用来显示文字或者图片其大小由 width/height 来控制。示例importtkinterastk wintk.Tk()win.title(hello world)win.geometry(400x200)win.iconbitmap(C:/Users/Administrator/Desktop/helloworldlogo.ico)# 若内容是文字则以字符为单位图像则以像素为单位labeltk.Label(win,text网址sample.net,font(宋体,20,bold italic),bg#7CCD7C,# 设置标签内容区大小width30,height5,# 设置填充区距离、边框宽度和其样式凹陷式padx10,pady15,borderwidth10,reliefsunken)label.pack()win.mainloop()运行结果Message控件Message 控件与 Label 控件的功能类似它主要用来显示多行不可编辑的文本信息与 Label 的不同之处在于该控件增加了自动分行的功能。下面对它做简单的介绍示例如下fromtkinterimport*#创建主窗口winTk()win.config(bg#8DB6CD)win.title(hello world)win.geometry(400x300)win.iconbitmap(C:/Users/Administrator/Desktop/helloworldlogo.ico)txthello worldmsgMessage(win,texttxt,width60,font(微软雅黑,10,bold))msg.pack(sideLEFT)#开始程序循环win.mainloop()运行结果共同属性共同属性anchoranchor属性用于设置标签内文本的对齐方式。可以设置为以下值n北上s南下e东右w西左ne东北nw西北se东南sw西南center居中默认示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Label Anchor Example)# 创建不同对齐方式的标签label_ntk.Label(root,textNorth,anchorn,bglightblue,width20)label_stk.Label(root,textSouth,anchors,bglightgreen,width20)label_etk.Label(root,textEast,anchore,bglightcoral,width20)label_wtk.Label(root,textWest,anchorw,bglightyellow,width20)label_ctk.Label(root,textCenter,anchorcenter,bglightgray,width20)# 布局标签label_n.pack(fillx)label_s.pack(fillx)label_e.pack(fillx)label_w.pack(fillx)label_c.pack(fillx)# 运行主循环root.mainloop()Label文字输出换行位置wraplength属性用于设置标签内容的最大宽度以像素为单位当文本超过这个宽度时会自动换行。这个属性非常有用可以帮助改善用户界面的可读性特别是当标签中包含长文本时。示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Label Wraplength Example)# 创建标签设置wraplength属性labeltk.Label(root,text这是一个很长的文本示例用于展示Label的wraplength属性。当文本超过指定的宽度时它会自动换行。,wraplength150,# 设置最大宽度为150像素justifyleft)# 文本左对齐# 放置标签label.pack(padx10,pady10)# 运行主循环root.mainloop()共同属性FontFont属性用于设置标签的字体样式包括字体名称、大小和样式如粗体、斜体等。通过配置这个属性可以让文本显示的更加美观和符合需求。示例importtkinterastkfromtkinterimportfont# 创建主窗口roottk.Tk()root.title(Tkinter Label Font 示例)# 设置字体custom_fontfont.Font(familyHelvetica,size16,weightbold,slantitalic)# 创建标签并应用字体labeltk.Label(root,text欢迎使用Tkinter!,fontcustom_font)label.pack(pady20)# 运行主循环root.mainloop()justify参数justify属性用于设置文本在标签内的对齐方式。它影响多个文本行的水平对齐方式。可以取的值有LEFT左对齐默认值。CENTER居中对齐。RIGHT右对齐。示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Label Justify Example)# 创建标签label_lefttk.Label(root,text这是一行文本\n这是另一行文本,justifyleft)label_centertk.Label(root,text这是一行文本\n这是另一行文本,justifycenter)label_righttk.Label(root,text这是一行文本\n这是另一行文本,justifyright)# 布局标签label_left.pack(pady10)label_center.pack(pady10)label_right.pack(pady10)# 运行主循环root.mainloop()共同属性BitmapsLabel控件用于显示文本或图像。bitmap属性用于在标签中显示位图图像。Tkinter提供了一些默认的位图类型可以直接使用。常用的位图类型errorinfoquestheadhourglassquestionwarning示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Tkinter Label Bitmaps 示例)# 创建标签并使用位图labeltk.Label(root,text这是一个位图标签,bitmapinfo)label.pack(pady20)# 运行主循环root.mainloop()compound参数compound属性用于在标签中同时显示文本和图像。它允许指定文本和图像的相对位置。可用的值包括top图像在文本上方bottom图像在文本下方left图像在文本左侧right图像在文本右侧none只显示文本或图像示例importtkinterastkfromPILimportImage,ImageTk# 创建主窗口roottk.Tk()root.title(Label Example)# 加载图像imageImage.open(path/to/your/image.png)# 替换为你的图像路径photoImageTk.PhotoImage(image)# 创建标签labeltk.Label(root,textHello, Tkinter!,imagephoto,compoundleft)# 图像在文本左侧# 显示标签label.pack(pady20)# 运行主循环root.mainloop()共同属性reliefrelief属性用于设置标签的边框样式。可以让界面元素有不同的视觉效果以增强用户体验。常用的值包括flat无边框。sunken凹陷效果。raised凸起效果。groove凹槽效果。ridge脊状效果。示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Label Relief Example)# 创建不同边框样式的标签label_flattk.Label(root,textFlat,relieftk.FLAT,width20)label_sunkentk.Label(root,textSunken,relieftk.SUNKEN,width20)label_raisedtk.Label(root,textRaised,relieftk.RAISED,width20)label_groovetk.Label(root,textGroove,relieftk.GROOVE,width20)label_ridgetk.Label(root,textRidge,relieftk.RIDGE,width20)# 使用grid布局label_flat.grid(row0,column0,padx10,pady10)label_sunken.grid(row1,column0,padx10,pady10)label_raised.grid(row2,column0,padx10,pady10)label_groove.grid(row3,column0,padx10,pady10)label_ridge.grid(row4,column0,padx10,pady10)# 启动主循环root.mainloop()标签文字与标签区间的间距padx/padyLabel是用于显示文本或图像的控件padx和pady是用于设置标签周围内边距的属性padx设置标签内容与标签边缘之间的水平内边距。pady设置标签内容与标签边缘之间的垂直内边距。示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Label Padding Example)# 创建标签设置padx和padylabel1tk.Label(root,textHello, World!,padx20,pady10,bglightblue)label1.pack(padx10,pady10)# 设置标签包裹的外边距label2tk.Label(root,textWelcome to Tkinter!,padx10,pady5,bglightgreen)label2.pack(padx10,pady10)# 运行主循环root.mainloop()图像PhotoImageLabel是用来显示文本或图像的控件。PhotoImage是用于显示图片的类可以加载 GIF 或 PNG 格式的图像。以下是Label的一些共同属性以及PhotoImage的使用方法。共同属性text显示的文本。image显示的图像使用PhotoImage加载。compound指定文本和图像的显示方式如top,bottom,left,right。bg背景颜色。fg文本颜色。font字体样式。示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Tkinter Label Example)# 加载图像imagetk.PhotoImage(fileexample.png)# 请确保文件路径正确# 创建Label并设置属性labeltk.Label(root,textHello, Tkinter!,imageimage,compoundtop,bglightblue,fgblack,font(Arial,16))label.pack(padx20,pady20)# 运行主循环root.mainloop()共同属性CursorLabel小部件的cursor属性用于设置鼠标悬停在标签上时显示的光标样式。常用光标样式arrow默认箭头光标hand2手指光标通常用于表示点击text文本选择光标cross十字光标示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Label Cursor Example)# 创建标签并设置光标labeltk.Label(root,text悬停在这里,cursorhand2)label.pack(pady20)# 运行主循环root.mainloop()控件共同方法常见空间控制方法方法/属性描述语法pack()将控件添加到窗口并自动调整其大小和位置widget.pack(options)grid()以表格形式布局控件允许指定行和列widget.grid(row, column, options)place()通过绝对坐标来放置控件适用于需要精确控制位置的情况widget.place(x, y, options)config() / configure()修改控件的属性如文本、颜色、字体等widget.config(optionvalue, …)destroy()删除控件从窗口中移除widget.destroy()focus_set()将输入焦点设置到当前控件widget.focus_set()bind()绑定事件到控件允许自定义响应动作widget.bind(‘’, callback_function)共同方法config( )config 方法是Tkinter中用于动态修改已有组件属性的重要方法。通过此方法可以轻松地改变组件的外观和行为。可以接受多个参数这些参数对应组件的属性。通过 config 方法可以设置属性值无需重新创建组件。示例importtkinterastk# 创建主窗口roottk.Tk()root.title(Config 示例)# 创建一个标签labeltk.Label(root,textHello, World!,fgblack,font(Arial,14))label.pack(pady10)# 定义一个按钮点击事件defchange_label():label.config(textText Changed!,fgred,font(Arial,18))# 创建一个按钮buttontk.Button(root,textChange Label,commandchange_label)button.pack(pady5)# 进入主循环root.mainloop()共同方法keys( )keys 方法用于获取当前窗口中所有键盘事件的绑定即它返回当前对象如框架、画布等上所有可用的键盘绑定键列表通常在与键盘事件交互时使用可以辅助开发者理解或调试当前的键盘事件绑定。示例importtkinterastkdefshow_keys(event):print(fKey pressed:{event.keysym})roottk.Tk()root.title(Keys 方法示例)# 绑定键盘事件root.bind(Key,show_keys)# 创建一个标签说明用户按键labeltk.Label(root,textPress any key...)label.pack(pady20)# 进入主循环root.mainloop()分隔线SeparatorSeparator 是Tkinter中的一个用来创建分隔符的组件通常用于在界面中视觉上分隔不同的控件或内容区域。示例importtkinterastkfromtkinterimportttk# 创建主窗口roottk.Tk()root.title(Separator 示例)# 创建标签label1ttk.Label(root,textSection 1)label1.pack(pady10)# 创建水平分隔符separatorttk.Separator(root,orienthorizontal)separator.pack(fillx,pady10)# 创建第二个标签label2ttk.Label(root,textSection 2)label2.pack(pady10)# 创建垂直分隔符separator2ttk.Separator(root,orientvertical)separator2.pack(sideleft,filly,padx10)# 创建两个标签用于垂直分隔label3ttk.Label(root,textLeft Section)label3.pack(sideleft,padx10)label4ttk.Label(root,textRight Section)label4.pack(sideleft,padx10)# 进入主循环root.mainloop()