python tkinter 设计指南

2023-03-21 17:21:15 浏览数 (4)

如何打包 Python 文件至 Mac app

代码语言:javascript复制
pyinstaller -F demo.py

参数

含义

-F

指定打包后只生成一个exe格式的文件

-D

–onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)

-c

–console, –nowindowed 使用控制台,无界面(默认)

-w

–windowed, –noconsole 使用窗口,无控制台

-p

添加搜索路径,让其找到对应的库。

-i

改变生成程序的icon图标

tkinter 指南

一个小例子

代码语言:javascript复制
# -*- coding:utf-8 -*-
import tkinter as tk

root_window =tk.Tk() # 主窗口
root_window.title('C语言中文网:c.biancheng.net') # 窗口名字
root_window.mainloop() #开启主循环,让窗口处于显示状态

文字和关闭按钮

代码语言:javascript复制
# -*- coding:utf-8 -*-
import tkinter as tk

root_window = tk.Tk() # 主窗口
root_window.title('C语言中文网:c.biancheng.net') # 窗口名字

root_window.geometry('450x300') # 大小
root_window.iconbitmap('favicon.ico') # 图标
root_window["background"] = "#C9C9C9" # 背景颜色

text=tk.Label(root_window,text="C语言中文网,欢迎您",bg="yellow",fg="red",font=('Times', 20, 'bold italic'))
text.pack() # 文字标签

button=tk.Button(root_window,text="关闭",command=root_window.quit)
button.pack(side="bottom") # 按钮

root_window.mainloop() #开启主循环,让窗口处于显示状态

常用的 15 个控件

下表列出了 Tkinter 中常用的 15 个控件:

控件类型

控件名称

控件作用

Button

按钮

点击按钮时触发/执行一些事件(函数)

Canvas

画布

提供绘制图,比如直线、矩形、多边形等

Checkbutton

复选框

多项选择按钮,用于在程序中提供多项选择框

Entry

文本框输入框

用于接收单行文本输入

Frame

框架(容器)控件

定义一个窗体(根窗口也是一个窗体),用于承载其他控件,即作为其他控件的容器

Lable

标签控件

用于显示单行文本或者图片

LableFrame

容器控件

一个简单的容器控件,常用于复杂的窗口布局。

Listbox

列表框控件

以列表的形式显示文本

Menu

菜单控件

菜单组件(下拉菜单和弹出菜单)

Menubutton

菜单按钮控件

用于显示菜单项

Message

信息控件

用于显示多行不可编辑的文本,与 Label控件类似,增加了自动分行的功能

messageBox

消息框控件

定义与用户交互的消息对话框

OptionMenu

选项菜单

下拉菜单

PanedWindow

窗口布局管理组件

为组件提供一个框架,允许用户自己划分窗口空间

Radiobutton

单选框

单项选择按钮,只允许从多个选项中选择一项

Scale

进度条控件

定义一个线性“滑块”用来控制范围,可以设定起始值和结束值,并显示当前位置的精确值

Spinbox

高级输入框

Entry 控件的升级版,可以通过该组件的上、下箭头选择不同的值

Scrollbar

滚动条

默认垂直方向,鼠标拖动改变数值,可以和 Text、Listbox、Canvas等控件配合使用

Text

多行文本框

接收或输出多行文本内容

Toplevel

子窗口

在创建一个独立于主窗口之外的子窗口,位于主窗口的上一层,可作为其他控件的容器

控件的基本属性

属性名称

说明

anchor

定义控件或者文字信息在窗口内的位置

bg

bg 是 background 的缩写,用来定义控件的背景颜色,参数值可以颜色的十六进制数,或者颜色英文单词

bitmap

定义显示在控件内的位图文件

borderwidth

定于控件的边框宽度,单位是像素

command

该参数用于执行事件函数,比如单击按钮时执行特定的动作,可将执行用户自定义的函数

cursor

当鼠标指针移动到控件上时,定义鼠标指针的类型,字符换格式,参数值有 crosshair(十字光标)watch(待加载圆圈)plus(加号)arrow(箭头)等

font

若控件支持设置标题文字,就可以使用此属性来定义,它是一个数组格式的参数 (字体,大小,字体样式)

fg

fg 是 foreground 的缩写,用来定义控件的前景色,也就是字体的颜色

height

该参数值用来设置控件的高度,文本控件以字符的数目为高度(px),其他控件则以像素为单位

image

定义显示在控件内的图片文件

justify

定义多行文字的排列方式,此属性可以是 LEFT/CENTER/RIGHT

padx/pady

定义控件内的文字或者图片与控件边框之间的水平/垂直距离

relief

定义控件的边框样式,参数值为FLAT(平的)/RAISED(凸起的)/SUNKEN(凹陷的)/GROOVE(沟槽桩边缘)/RIDGE(脊状边缘)

text

定义控件的标题文字

state

控制控件是否处于可用状态,参数值默认为 NORMAL/DISABLED,默认为 NORMAL(正常的)

width

用于设置控件的宽度,使用方法与 height 相同

主窗口

下表列出了窗口的常用方法,其中 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)

设置窗口被允许调整的最小范围,即宽和高各50

window.maxsize(400,400)

设置窗口被允许调整的最大范围,即宽和高各400

window.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() 刷新屏幕,否则返回值为1

window.protocol("协议名",回调函数)

启用协议处理机制,常用协议有 WN_DELETE_WINDOW,当用户点击关闭窗口时,窗口不会关闭,而是触发回调函数。

程序 1

方法使用例子
代码语言:javascript复制
import tkinter as tk

window =tk.Tk()

window.title('C语言中文网')

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',0.9)

# 最大调整的范围
window.maxsize(600,600)

# 最小调整的范围
window.minsize(50,50)

#进入主循环,显示主窗口
window.mainloop()

程序 2 ,

演示 protocol
代码语言:javascript复制
from tkinter import Tk
# 导入 对话框控件
from tkinter import messagebox

root = Tk()

def QueryWindow(): # 当退出时
    if messagebox.showwarning("警告","出现了一个错误"): # 显示警告
        root.destroy() # 关闭窗口

# 当 Tkinter 使用 WM_DELETE_WINDOW 协议与主窗口进行交互
# 则 Tkinter 主窗口右上角 x 号的关闭功能失效,
# 也就是无法通过点击 x 来关闭窗口,转变成调用用户自定义的函数。
root.protocol('WM_DELETE_WINDOW', QueryWindow)

root.mainloop()

程序 3,

演示 protocol 2
代码语言:javascript复制
import tkinter as tk
# 定义窗口
window = tk.Tk()
window.title('c语言中文网')
window.geometry('300x300')

# 定义回调函数
def callback():
    print("执行回调函数","C语言中文网欢迎您")

# 点击执行按钮
button = tk.Button(window, text="执行", command=callback)
button.pack()

window.mainloop()

程序 4 ,

显示到屏幕中间
代码语言:javascript复制
import tkinter as tk
window = tk.Tk()
window.title('c语言中文网')

# 设置窗口大小变量
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()

Label 标签控件

属性

属性名称

说明

anchor

控制文本(或图像)在 Label 中显示的位置(方位),通过方位的英文字符串缩写(n、ne、e、se、s、sw、w、nw、center)实现定位,默认为居中(center)

bg

用来设置背景色

bd

即 borderwidth 用来指定 Label 控件的边框宽度,单位为像素,默认为 2 个像素

bitmap

指定显示在 Label 控件上的位图,若指定了 image 参数,则该参数会被忽略

compound

控制 Lable 中文本和图像的混合模式,若选项设置为 CENTER,则文本显示在图像上,如果将选项设置为 BOTTOM、LEFT、RIGHT、TOP,则图像显示在文本旁边。

cursor

指定当鼠标在 Label 上掠过的时候,鼠标的的显示样式,参数值为 arrow、circle、cross、plus

disableforeground

指定当 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/pady

padx 指定 Label 水平方向上的间距(即内容和边框间),pady 指定 Lable 水平方向上的间距(内容和边框间的距离)

relief

指定边框样式,默认值是 "flat",其他参数值有 "groove"、"raised"、"ridge"、"solid"或者"sunken"

state

该参数用来指定 Lable 的状态,默认值为"normal"(正常状态),其他可选参数值有"active"和"disabled"

takefocus

默认值为False,如果是 True,表示该标签接受输入焦点

text

用来指定 Lable 显示的文本,注意文本内可以包含换行符

underline

给指定的字符添加下划线,默认值为 -1 表示不添加,当设置为 1 时,表示给第二个文本字符添加下划线。

wraplength

将 Label 显示的文本分行,该参数指定了分行后每一行的长度,默认值为 0

文字程序
代码语言:javascript复制
import tkinter as tk
win = tk.Tk()
win.title("C语言中文网")
win.geometry('400x200')

# 若内容是文字则以字符为单位,图像则以像素为单位
label = tk.Label(win,
                text="网址:c.biancheng.net",
                font=('宋体',20, 'bold italic'),
                bg="#7CCD7C",
                width=30,height=5, # 设置标签内容区大小
                padx=10, pady=15, borderwidth=10, relief="sunken" # 设置填充区距离、边框宽度和其样式(凹陷式)
                )

label.pack()
win.mainloop()
图像文字(无法打包)
代码语言:javascript复制
import tkinter as  tk
win = tk.Tk()
win.title("C语言中文网")

#显示图片(注意这里默认支持的图片格式为GIF)
photo = tk.PhotoImage(file = '0.gif')

# 将图片放在主窗口的右边
lab =tk.Label(win,image=photo).pack(side="right")
# 显示文字,设置文本格式
text = "C语言中文网欢迎您,n"
       "这里有精彩的教程,n "
       "这里有数不尽的知识宝藏"

lab_text =tk.Label(win,text=text,fg ='#7CCD7C',font=('微软雅黑',15,'italic'),justify='left',padx=10).pack(side='left')
win.mainloop()
创建 message
代码语言:javascript复制
from tkinter import *
#创建主窗口
win = Tk()
win.config(bg='#8DB6CD')
win.title("C语言中文网")
win.geometry('400x300')

txt = "C语言中文网,网址是:c.biancheng.net"

msg = Message (win, text=txt,width =60,font=('微软雅黑',10,'bold'))
msg.pack (side=LEFT)

win.mainloop ()

Button 按钮

Button 控件的

常用属性

如下所示:

属性

说明

anchor

控制文本所在的位置,默认为中心位置(CENTER)

activebackground

当鼠标放在按钮上时候,按妞的背景颜色

activeforeground

当鼠标放在按钮上时候,按钮的前景色

bd

按钮边框的大小,默认为 2 个像素

bg

按钮的背景色

command

用来执行按钮关联的回调函数。当按钮被点击时,执行该函数

fg

按钮的前景色

font

按钮文本的字体样样式

height

按钮的高度

highlightcolor

按钮控件高亮处要显示的颜色

image

按钮上要显示的图片

justify

按钮显示多行文本时,用来指定文本的对齐方式,参数值有 LEFT/RIGHT/CENTER

padx/pady

padx 指定 x 轴(水平方向)的间距大小,pady 则表示 y轴(垂直方向)的间距大小

ipadx/ipady

ipadx 指标签文字与标签容器之间的横向距离;ipady 则表示标签文字与标签容器之间的纵向距离

state

设置按钮的可用状态,可选参数有NORMAL/ACTIVE/DISABLED,默认为 NORMAL

text

按钮控件要显示的文本

网格布局
代码语言:javascript复制
import tkinter as tk
from tkinter import messagebox

win = tk.Tk()
win.title("C语言中文网")
win.geometry('400x200 100 100')
win.resizable(0,0)

# 将俩个标签分别布置在第一行、第二行
tk.Label(win, text="账号:").grid(row=0)
tk.Label(win, text="密码:").grid(row=1)

# 创建输入框控件
e1 = tk.Entry(win)

# 以 * 的形式显示密码
e2 = tk.Entry(win,show='*')

e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)

# 编写一个简单的回调函数
def login():
    messagebox.showinfo('欢迎您到来')

tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, sticky="w", padx=10, pady=5)
tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, sticky="e", padx=10, pady=5)

win.mainloop()

Entry 输入控件

演示动态字符串

时间程序(演示动态字符串
代码语言:javascript复制
import tkinter as tk
import time
root = tk.Tk()
root.title("C语言中文网")
root.geometry('450x150 100 100')
root.resizable(0,0)
root.title('我们的时钟')

# 获取时间的函数
def gettime():
    dstr.set(time.strftime("%H:%M:%S")) # 获取当前时间
    root.after(1000, gettime) # 每隔 1s 调用一次 gettime()函数来获取时间

# 生成动态字符串
dstr = tk.StringVar()

lb = tk.Label(root,textvariable=dstr,fg='green',font=("微软雅黑",85))
lb.pack()

# 调用生成时间的函数
gettime()

# 显示窗口
root.mainloop()
演示 entry
代码语言:javascript复制
import tkinter as tk
win = tk.Tk()
win.geometry('250x100')
win.title("C语言中文网")
win.resizable(0,0)

# 创建输入框控件
entry1 = tk.Entry(win)

# 放置输入框,并设置位置
entry1.pack(padx=20, pady=20)
entry1.delete(0, "end")

# 插入默认文本
entry1.insert(0,'C语言中文网,网址:c.biancheng.net')

# 得到输入框字符串
print(entry1.get())

# 删除所有字符
# entry1.delete(0, tk.END)

win.mainloop()
常用属性

方法

说明

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。

简单计算器
代码语言:javascript复制
from tkinter import *
# 创建窗体
win = Tk()
win.title("C语言中文网")
win.geometry('300x300')

# 创建一个容器来包括其他控件
frame = Frame (win)

def calc() :
# 用户输入的表达式,计算结果后转换为字符串
    result = "= "  str (eval(expression.get()))
    #将计算的结果显示在Label控件上
    label.config(text =result)

#创建一个Label控件
label = Label (frame)

#创建一个Entry控件
entry = Entry (frame)

#读取用户输入的表达式
expression = StringVar ()

#将用户输入的表达式显示在Entry控件上
entry ["textvariable"] = expression

#创建-一个 Button控件.当用户输入完毕后,单击此按钮即计算表达式的结果
button1 = Button (frame, text="等 于",command=calc)

#设置Entry控件为焦点所在
entry.focus ()
frame.pack ()

#Entry控件位于窗体的上方
entry .pack()

#Label控件位于窗体的左方
label .pack (side="left")

#Button控件位于窗体的右方
button1.pack (side="right")
#开始程序循环
frame .mainloop()
Spinbox 高级输入框
代码语言:javascript复制
import tkinter as tk
root = tk.Tk()
root.title("C语言中文网")
root.geometry('300x200 300 300')

# 如果是数字使用 from_和to参数,范围 0-20,并且与2步长递增或递减
w = tk.Spinbox(root,from_=0,to=20, increment=2,width = 15,bg='#9BCD9B')

w.pack()

# 显示窗口
root.mainloop()

Text 文本框控件

代码语言:javascript复制
from tkinter import *

win = Tk()
win.title("C语言中文网")
win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
win.geometry('400x420')

# width 一行可见的字符数;height 显示的行数
text = Text(win, width=50, height=30, undo=True, autoseparators=False)

# 适用 pack(fill=X) 可以设置文本域的填充模式。比如 X表示沿水平方向填充,Y表示沿垂直方向填充,BOTH表示沿水平、垂直方向填充
text.pack()

# INSERT 光标处插入;END 末尾处插入
text.insert(INSERT, 'C语言中文网,一个有温度的网站')

win.mainloop()

Text 控件还具备以下

属性

属性

说明

autoseparators

默认为 True,表示执行撤销操作时是否自动插入一个“分隔符”(其作用是用于分隔操作记录)

exportselection

默认值为 True,表示被选中的文本是否可以被复制到剪切板,若是 False 则表示不允许。

insertbackground

设置插入光标的颜色,默认为 BLACK

insertborderwidth

设置插入光标的边框宽度,默认值为 0

insertofftime

该选项控制光标的闪烁频频率(灭的状态)

insertontime

该选项控制光标的闪烁频频率(亮的状态)

selectbackground

指定被选中文本的背景颜色,默认由系统决定

selectborderwidth

指定被选中文本的背景颜色,默认值是0

selectforeground

指定被选中文本的字体颜色,默认值由系统指定

setgrid

默认值是 False,指定一个布尔类型的值,确定是否启用网格控制

spacing1

指定 Text 控件文本块中每一行与上方的空白间隔,注意忽略自动换行,且默认值为 0。

spacing2

指定 Text 控件文本块中自动换行的各行间的空白间隔,忽略换行符,默认值为0

spacing3

指定 Text 组件文本中每一行与下方的空白间隔,忽略自动换行,默认值是 0

tabs

定制 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 相关联,表示沿垂直方向左右滑动

基本方法

方法

说明

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。

Tag 文本标签
代码语言:javascript复制
from tkinter import *
from tkinter import *
# 创建主窗口
win = Tk()
win.title(string = "C语言中文网")

# 创建一个Text控件
text = Text (win)

# 在Text控件内插入- -段文字 ,INSERT表示在光标处插入,END表示在末尾处插入
text.insert (INSERT,  "C语言中文网(网址:c.biancheng.net),一个有温度的网站,一生只做一件事nn")

# 跳下一行
text.insert (INSERT, "nn")

# 在Text控件内插入- -个按钮
button = Button(text, text="关闭",command=win.quit)
text. window_create (END, window=button)

# 填充水平和垂直方向,这里设置 expand为 True 否则不能垂直方向延展
text .pack (fill=BOTH,expand=True)

# 在第一行文字的第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'),background="yellow", foreground= "blue",underline=1)

#设置标签"button"的居中排列
text. tag_config("button", justify="center")

#开始程序循环
win .mainloop()
。。。

event 事件

显示按键
代码语言:javascript复制
from tkinter import *

# 定义事件函数,必须用event参数
def show_key(event):
    # 查看触发事件的按钮
    s=event.keysym
    # 将其显示在按钮控件上
    lb.config(text=s)

root=Tk()
root.config(bg='#87CEEB')
root.title("C语言中文网")
root.geometry('450x350 300 200')

# 添加一个按钮控件
lb=Label(root,text='请按键',fg='blue',font=('微软雅黑',15))

# 给按钮控件绑定事件,按下任意键,然后调用事件处理函数。注意,此处需要在英文状态下进行输入
lb.bind('<Key>',show_key)

# 设置按钮获取焦点
lb.focus_set()

lb.pack()

# 显示窗口
root.mainloop()
事件类型

事件码

说明

单击鼠标左键,简写为,后面的数字可以是1/2/3,分别代表左键、中间滑轮、右键

释放鼠标左键,后面数字可以是1/2/3,分别代表释放左键、滑轮、右键

按住鼠标左键移动,和分别表示按住鼠标滑轮移动、右键移动

转动鼠标滑轮

双击鼠标左键

鼠标光标进入控件实例

鼠标光标离开控件实例

按下键盘上的任意键

<KeyPress-字母>/<KeyPress-数字>

按下键盘上的某一个字母或者数字键

释放键盘上的按键

回车键,其他同类型键有///

空格键

///

方向键

...

常用的功能键

组合键,再比如,表示用户同时点击 Ctrl Shift T

当控件获取焦点时候触发,比如鼠标点击输入控件输入内容,可以调用 focus_set() 方法使控件获得焦点

当控件失去焦点时激活,比如当鼠标离开输入框的时候

控件的发生改变的时候触发事件,比如调整了控件的大小等

当控件的状态从“激活”变为“未激活”时触发事件

当控件被销毁的时候触发执行事件的函数

当窗口或组件的某部分不再被覆盖的时候触发事件

当应用程序至少有一部分在屏幕中是可见状态时触发事件

常用属性

属性

说明

widget

发生事件的是哪一个控件

x,y

相对于窗口的左上角而言,当前鼠标的坐标位置

x_root,y_root

相对于屏幕的左上角而言,当前鼠标的坐标位置

char

用来显示所按键相对应的字符

keysym

按键名,比如 Control_L 表示左边的 Ctrl 按键

keycode

按键码,一个按键的数字编号,比如 Delete 按键码是107

num

1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右

width,height

控件的修改后的尺寸,对应着 事件

type

事件类型

布局管理

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 例子
代码语言:javascript复制
from tkinter import  *
win = Tk()
win.title("C语言中文网")
win.geometry('450x300 300 300')

lb_red = Label(win,text="红色",bg="Red",fg='#ffffff',relief=GROOVE)

# 默认以top方式放置
lb_red.pack()
lb_blue = Label(win,text="蓝色",bg="blue",fg='#ffffff',relief=GROOVE)

# 沿着水平方向填充,使用 pady 控制蓝色标签与其他标签的上下距离为 5 个像素
lb_blue.pack(fill=X,pady='5px')

lb_green = Label(win,text="绿色",bg="green",fg='#ffffff',relief=RAISED)
# 将 黄色标签所在区域都填充为黄色,当使用 fill 参数时,必须设置 expand = 1,否则不能生效
lb_green.pack(side=LEFT,expand=1,fill = BOTH)

win.mainloop()

Grid 例子

代码语言:javascript复制
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title("C语言中文网")
root.resizable(0,0)

tk.Label(root, text="用户名").grid(row=0, sticky="w")

tk.Label(root, text="密码").grid(row=1, sticky="w")

tk.Entry(root).grid(row=0, column=1)

tk.Entry(root, show="*").grid(row=1, column=1)

# 加载图片LOGO,注意这里是gif格式的图片
photo = tk.PhotoImage(file="/Users/kehongli/Downloads/removeAnytime/pythontest/0.gif")
tk.Label(root, image=photo).grid(row=0, column=2, rowspan=2, padx='4px', pady='5px')

# 编写一个简单的回调函数
def login():
    messagebox.showinfo('欢迎来到C语言中文网')

# 使用grid()函数来布局,并控制按钮的显示位置
tk.Button(root, text="登录", width=10, command=login).grid(row=3, column=0, columnspan=2,sticky="w", padx=10, pady=5)
tk.Button(root, text="退出", width=10, command=root.quit).grid(row=3, column=1, columnspan=2,sticky="e", padx=10, pady=5)

# 开启事件主循环
root.mainloop()

place()

属性

属性

说明

anchor

定义控件在窗体内的方位,参数值N/NE/E/SE/S/SW/W/NW 或 CENTER,默认值是 NW

bordermode

定义控件的坐标是否要考虑边界的宽度,参数值为 OUTSIDE(排除边界) 或 INSIDE(包含边界),默认值 INSIDE。

x、y

定义控件在根窗体中水平和垂直方向上的起始绝对位置

relx、rely

1. 定义控件相对于根窗口(或其他控件)在水平和垂直方向上的相对位置(即位移比例),取值范围再 0.0~1.0 之间 2. 可设置 in_ 参数项,相对于某个其他控件的位置

height、width

控件自身的高度和宽度(单位为像素)

relheight、relwidth

控件高度和宽度相对于根窗体高度和宽度的比例,取值也在 0.0~1.0 之间

例子
代码语言:javascript复制
from tkinter import *
#主窗口
win = Tk()
win.title("C语言中文网")

#创建一个frame窗体对象,用来包裹标签
frame = Frame (win, relief=SUNKEN, borderwidth=2, width=450, height=250)

# 在水平、垂直方向上填充窗体
frame. pack (side=TOP, fill=BOTH, expand=1)

# 创建 "位置1"
Label1 = Label ( frame, text="位置1",bg='blue',fg='white')

# 使用 place,设置第一个标签位于距离窗体左上角的位置(40,40)和其大小(width,height)
# 注意这里(x,y)位置坐标指的是标签左上角的位置(以NW左上角进行绝对定位,默认为NW)
Label1.place (x=40,y=40, width=60, height=30)

# 设置标签2
Label2 = Label (frame, text="位置2",bg='purple',fg='white')

# 以右上角进行绝对值定位,anchor=NE,第二个标签的位置在距离窗体左上角的(180,80)
Label2.place(x=180,y=80, anchor=NE, width=60, height=30)

# 设置标签3
Label3 = Label (frame, text="位置3",bg='green',fg='white')

# 设置水平起始位置相对于窗体水平距离的0.6倍,垂直的绝对距离为80,大小为60,30
Label3.place(relx=0.6,y=80, width=60, height=30)

# 设置标签4
Label4 = Label (frame, text="位置4",bg='gray',fg='white')

# 设置水平起始位置相对于窗体水平距离的0.01倍,垂直的绝对距离为80,并设置高度为窗体高度比例的0.5倍,宽度为80
Label4.place(relx=0.01,y=80,relheight=0.4,width=80)

#开始事件循环
win. mainloop()

对话框

百度关键词搜索 API 接口

接口地址:https://www.baidu.com/s 请求方式:GET 返回格式:HTML 页面 请求参数:

参数名

类型

描述

示例

wd

String

需要搜索的关键词内容

如何做京酱肉丝

0 人点赞