tkinter学习系列(四)之Button 控件
目录
前言
Button小部件是一个标准的Tkinter的控件,用于实现各种按钮。按钮可以包含文本或图像,您可以调用Python函数或方法用于每个按钮。Tkinter的按钮被按下时,会自动调用该函数或方法
(一)基本用法和可选属性
1.基本用法
基本用法:Button(根对象, [属性列表])
根对象:在那个窗体显示,例如主窗体。
属性列表:是可选的属性=属性值组成。
2.可选属性
| 属性 | 说明 |
|---|---|
| text | 标签显示的文本 |
| font | 设置文本的字体和大小 |
| fg(foreground) | 字体的颜色, |
| bg (background) | 标签的背景色 |
| width | 标签的宽度(一个中文的字体宽为单位) |
| height | 标签的高度(一个中文的字体高为单位) |
| cursor | 鼠标的样式 |
| command | 绑定事件 |
| padx | 文字到边框的距离,水平方向 |
| pady | 文字到边框的距离,垂直方向 |
| bd(borderwidth) | 边框的宽度 |
| relief | 边框的样式 |
| justify | 文本对齐方式 |
| image | 图片 |
| compound | 图片与文字的混搭 |
| anchor | 方位 |
(二)属性的具体实现和案例
1.常用属性
(1)font
font:设置字体与字体的大小
用法:font=("字体名",大小) 例如:font=(“黑体”, 20)
(2)fg 与 bg
fg 前景色,也就是字体的颜色,bg 背景颜色
用法:fg="red", fg="#121234"
(3)width 与 height
width height 标签的宽度与高度,都是以系统默认的中文的一个字体宽高为单位
用法:width = 5, height=2
案例一
(1)源代码
import tkinter as tk
win = tk.Tk()
# 普通的按钮
button1 = tk.Button(win, text="Button1")
button1.pack()
# 背景色与前景色
button2 = tk.Button(win, text="Button2", bg="green", fg="blue")
button2.pack()
# 宽度与高度
button3 = tk.Button(win, text="Button3", width=10, height=2)
button3.pack()
# 边距
button4 = tk.Button(win, text="Button4", padx=10, pady=10)
button4.pack()
win.mainloop()
(2)输出效果

2.按钮里的图片
(1)只放图片,没有文字
需要先导入图片的路径:img1 = tk.PhotoImage(file="image/01.png")
再使用:image=img1
注:目前支持 .png 与 .gif 格式, 还不支持 .jpg格式,Button的大小是根据图片的大小来确定的。
案例二
(1)源代码:
import tkinter as tk
win = tk.Tk()
img1 = tk.PhotoImage(file="image/01.png")
img2 = tk.PhotoImage(file="image/03.png")
img3 = tk.PhotoImage(file="image/04.png")
# 300像素大小的图片
button1 = tk.Button(win, text="Button1", image=img1)
button1.pack()
# 150像素大小的图片
button2 = tk.Button(win, image=img2)
button2.pack()
# 50像素大小的图片
button3 = tk.Button(win, image=img3)
button3.pack()
win.mainloop()
(2)输出效果:

(3)图片与文字混搭
需要使用:compound="对齐方式",
对齐方式有:'left', "right", "center"
案例三
(1)源代码
import tkinter as tk
win = tk.Tk()
img1 = tk.PhotoImage(file="image/01.png")
img2 = tk.PhotoImage(file="image/03.png")
img3 = tk.PhotoImage(file="image/04.png")
button1 = tk.Button(win, text="Button1", image=img1, compound="left")
button1.pack()
button2 = tk.Button(win, text="Button2", image=img2, compound="center")
button2.pack()
button3 = tk.Button(win, text="Button3", image=img3, compound="right")
button3.pack()
win.mainloop()
(2)输出效果

3.鼠标的样式
cursor="鼠标的属性值"
pencil:笔型
circle:圆形
hand1:手型1
hand2:手型2
案例四
(1)源代码
import tkinter as tk
win = tk.Tk()
# 笔型
button1 = tk.Button(win, text="Button1", cursor="pencil")
button1.pack()
# 圆形
button2 = tk.Button(win, text="Button2", cursor="circle")
button2.pack()
# 手型1
button3 = tk.Button(win, text="Button3", cursor="hand1")
button3.pack()
# 手型2
button4 = tk.Button(win, text="Button4", cursor="hand2")
button4.pack()
win.mainloop()
(2)输出效果
当我们把鼠标放在按钮上时,鼠标的形状会显示不同的样式。

4.边框样式
relief= "边框样式值"
flat 无边框
groove 中间凹
ridge 中间凸
raised 往中间凸
solid 往中间凹
sunken 不可以
案例五
(1)源代码
import tkinter as tk
win = tk.Tk()
# flat 无边框
button1 = tk.Button(win, text="flat", relief="flat", bd=10)
button1.pack()
# groove 中间凹
button2 = tk.Button(win, text="groove", relief="groove", bd=10)
button2.pack()
# ridge 中间凸
button3 = tk.Button(win, text="raised", relief="ridge", bd=10)
button3.pack()
# raised 往中间凸
button4 = tk.Button(win, text="ridge", relief="raised", bd=10)
button4.pack()
# solid 往中间凹
button5 = tk.Button(win, text="solid", relief="solid", bd=10)
button5.pack()
# sunken 不可以
button6 = tk.Button(win, text="sunken", relief="sunken", bd=10)
button6.pack()
win.mainloop()
(2)输出效果

(三)按钮的事件绑定
1.普通的Button绑定事件
(1)说明:
Button 使用 command=功能函数 来绑定
Button(win, text="确定", command=功能函数)
案例六
(1)源代码:
我们创建一个简单的窗体,只有一个按钮控件,
我们绑定的事件是,当我们点击"确定"按钮时,会输出“你点击了按钮”
import tkinter as tk
win = tk.Tk()
# 定义功能函数, event是必须添加的参数,不知道来自哪里
def button_command():
print("你点击了按钮")
# 绑定事件
btn = tk.Button(win, text="确定", command=button_command)
btn.place(relx=0.2, rely=0.2, relwidth=0.5, relheight=0.1)
win.geometry("300x300+200+200")
win.mainloop()
(2)输出效果:

2.传参数Button绑定事件
(1)说明:
我们使用Button传递数值时,需要用:
lambda: 功能函数(var1, var2, ……)
案例七
(1)源代码:
我们同样创建一个简单的窗体,只有一个控件按钮
我们绑定的事件是,当我们点击按钮时,会传入两个参数,并在功能函数进行计算。
import tkinter as tk
"""
Button command 传值事件
command= lambda: function(var1, var2, ...)
"""
def sum_fun(a, b):
result = a + b
print("%d + %d = %d" % (a, b, result))
win = tk.Tk()
button = tk.Button(win, text="传值事件", command=lambda: sum_fun(12, 13))
button.pack()
win.geometry("300x300+200+200")
win.mainloop()
(2)输出效果:

作者:Mark
日期:2019/02/01 周五
tkinter学习系列(四)之Button 控件的更多相关文章
- WP8.1学习系列(第二十章)——添加控件和处理事件
先决条件 添加控件 设置控件的名称 设置控件属性 创建事件处理程序 新控件 总结 相关主题 通过使用如按钮.文本框和组合框等控件,你可以创建应用的 UI. 下面将显示如何将控件添加到应用.处理控件时, ...
- 【Android开发日记】之入门篇(十四)——Button控件+自定义Button控件
好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把 ...
- WPF学习系列之五(WPF控件)
控件: 1.内容控件------这些控件能够包含嵌套的元素,为它们提供几乎无限的显示能力.内容控件包括Lable,Button 以及ToolTip类. 内容控件是更特殊的控件类型,它们可以包含( ...
- WP8.1学习系列(第十章)——中心控件Hub设计指南
Windows Phone 应用商店应用中的中心控件指南 在本文中 说明 示例 用法指南 设计指南 相关主题 重要的 API Hub (XAML) HubSection (XAML) 说明 中心控 ...
- ABP 基于DDD的.NET开发框架 学习(四)时间控件采用datetimepicker注意事项
$('#datetimepicker1').datetimepicker({ format: 'yyyy/mm/dd hh:ii:ss',//这是只能用小写的大写的与ABP中的字母识别起冲突 loca ...
- winform学习(7)Label控件、Button控件、TextBox控件
Label控件是System.Windows.Forms.Label 类提供的控件. 作用:主要用来提供其他控件的描述文字,例如:登录窗体上的用户名.密码(输入框前面的字) Button控件是Syst ...
- 《Dotnet9》系列-开源C# WPF控件库3《HandyControl》强力推荐
大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.我最近开始写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用do ...
- UGUI Button控件
今天一起来学习下Button控件, Button控件其实是由Text,Button,Image组件形成的. 这里就简单介绍下Button组件 Interactable: 代表该组件是否进行交互, 我们 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl 后篇 --事件冒泡 系列文章链接: ASP.NET ...
随机推荐
- Java线程中的join使用实例
JDK中解释为 Waits for this thread to die. 等待本线程结束后,下一个线程才可以运行. 实例要求: 现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3 ...
- MySQL 5.7最新版本的2个bug
好久没写博客了,都长草了.新业务上了5.7没遇到什么问题,虽然没遇到什么问题,但不代表没有问题,我有个习惯就是没事就喜欢逛逛percona的Blog,于是看到目前最新GA版本5.7.17的2个bug, ...
- Tensorflow学习笔记(2):tf.nn.dropout 与 tf.layers.dropout
A quick glance through tensorflow/python/layers/core.py and tensorflow/python/ops/nn_ops.pyreveals t ...
- jenkins+Android+gradle持续集成
本文Android自动化打包采用jenkins+gradle+upload to pyger的方式来实现,job执行完后只需要打开链接扫描二维码即可下载apk. 一.环境准备 1.下载Android ...
- JavaWeb学习(三十)———— 数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- FCKEditor的使用步骤
在线发布信息难免要用到在线编辑器,下面就说下在线编辑器的使用步骤: 1.下载FCK,这个不说了 2.把ZZGSEditor文件夹放到网站根目录 3.把FredCK.FCKeditorV2.dll文件放 ...
- vue.js 使用时间组件 日期少一天的问题
<el-form :inline="true" class="demo-form-inline padding-top-20"> <el-fo ...
- EF 中多个数据库迁移
Entity Framework 允许用户基于实体来创建和更新数据库,当项目中只有一个DBContext 时使用默认的参数就可以实现数据库的一些操作.当有多个DbContext 时需要制定参数才能完成 ...
- vb.net 變量及数据类型
Dim过程级变量 Private模块级变量 Public全局变量 Integer(整型) Long(长整型) Single(單精度浮點型) Double(双精度浮点型) Decimal(十进制型) S ...
- C#7.2——编写安全高效的C#代码
原文地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/write-safe-efficient-code?view=netcore-2.1 值类型的优 ...