这篇tkinter控件使用教程是最后一篇,接续介绍完我们前两篇没有介绍完的Treeview,MessageBox,spinbox,Progressbar,PaedWindows。除此外,还附加介绍了各类对话框及比较常用的按钮快捷键的添加方法。
文章随时可能更新,请关注文章原出处: https://blog.csdn.net/haigear/article/details/137359928
一、TreeView
属性/事件 | 描述 | 代码实例 |
---|---|---|
columns | 列名,用于设置树形视图的列 | tree["columns"] = ("姓名", "年龄", "性别") |
column | 列的属性,包括列名、宽度等 | tree.column("姓名", width=100) |
heading | 表头的属性,包括表头名称、文本等 | tree.heading("姓名", text="姓名") |
insert | 插入数据的方法,包括父节点、位置、文本、值等参数 | tree.insert("", 0, text="行1", values=("张三", "25", "男")) |
bind | 绑定事件的方法,包括事件名称和处理函数 | tree.bind("<<TreeviewSelect>>", on_select) |
<> | 当用户选择树形视图中的某个项目时触发的事件 | def on_select(event): |
以下是Tkinter Treeview的所有事件:
事件名称 | 描述 |
---|---|
TreeviewSelect | 当用户选择树形视图中的某个项目时触发的事件 |
TreeviewOpen | 当用户展开或折叠树形视图中的某个节点时触发的事件 |
TreeviewClose | 当用户关闭树形视图中的某个节点时触发的事件 |
TreeviewBell | 当用户尝试在树形视图中插入数据时,如果该数据已经存在,则触发此事件 |
TreeviewEdit | 当用户编辑树形视图中的某个项目时触发的事件 |
TreeviewInplaceEdit | 当用户使用“就地编辑”功能编辑树形视图中的某个项目时触发的事件 |
TreeviewBeginDrag | 当用户开始拖动树形视图中的某个项目时触发的事件 |
TreeviewEndDrag | 当用户结束拖动树形视图中的某个项目时触发的事件 |
TreeviewDrag | 当用户正在拖动树形视图中的某个项目时触发的事件 |
TreeviewDelete | 当用户删除树形视图中的某个项目时触发的事件 |
TreeviewRefresh | 当树形视图的数据源发生变化时触发的事件 |
TreeviewScroll | 当用户滚动树形视图时触发的事件 |
TreeviewSort | 当用户对树形视图进行排序时触发的事件 |
TreeviewItemInvoke | 当用户双击树形视图中的某个项目时触发的事件 |
TreeviewItemExpand | 当用户展开树形视图中的某个节点时触发的事件 |
TreeviewItemCollapse | 当用户折叠树形视图中的某个节点时触发的事件 |
TreeviewItemFocusIn | 当树形视图中的某个项目获得焦点时触发的事件 |
TreeviewItemFocusOut | 当树形视图中的某个项目失去焦点时触发的事件 |
TreeviewItemSelection | 当树形视图中的某个项目被选中或取消选中时触发的事件 |
TreeviewItemSelectionClear | 当树形视图中的某个项目的选中状态被清除时触发的事件 |
TreeviewItemSelectionSet | 当树形视图中的某个项目被选中时触发的事件 |
TreeviewItemSelectionToggle | 当树形视图中的某个项目的选中状态被切换时触发的事件 |
TreeviewItemVisible | 当树形视图中的某个项目变得可见时触发的事件 |
TreeviewItemHidden | 当树形视图中的某个项目变得不可见时触发的事件 |
TreeviewItemPrevVisible | 当树形视图中的某个项目的前一个项目变得可见时触发的事件 |
TreeviewItemNextVisible | 当树形视图中的某个项目的后一个项目变得可见时触发的事件 |
TreeviewItemActivate | 当树形视图中的某个项目被激活时触发的事件 |
下面是treeview调用的简单代码实例:
import tkinter as tk
from tkinter import ttk
def on_select(event):
item = tree.selection()[0]
print("你选择了", tree.item(item, "text"))
root = tk.Tk()
root.title("Treeview 示例")
tree = ttk.Treeview(root, columns=("名称", "类型"), show="headings")
tree.heading("名称", text="名称")
tree.heading("类型", text="类型")
tree.column("名称", width=100)
tree.column("类型", width=100)
tree.insert("", "end", text="文件夹1", values=("文件夹1", "文件夹"))
tree.insert("", "end", text="文件1", values=("文件1", "文件"))
tree.insert("", "end", text="文件2", values=("文件2", "文件"))
tree.bind("<<TreeviewSelect>>", on_select)
tree.pack()
root.mainloop()
运行效果:
二、消息框MessageBox
消息框对于每种GUI都是不可缺少的,就算是做个游戏也是需要的比如pygame就有。tkinter模块内有Messagebox模块,提供了8个对话框,这些对话框可以应用在不同场合。
属性/事件 | 描述 | 代码实例 |
---|---|---|
title | 消息框的标题 | messagebox.showinfo(title="提示") |
message | 消息框的内容 | messagebox.showinfo(message="这是一个提示") |
icon | 消息框的图标 | messagebox.showinfo(icon="error") |
type | 消息框的类型,一共六种:abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel | messagebox.showinfo(type="yesno") |
parent | 消息框的父窗口 | messagebox.showinfo(parent=root) |
detail | 消息框的详细信息 | messagebox.showinfo(detail="这是详细信息") |
default | 消息框的默认按钮 | messagebox.showinfo(default="ok") |
cancel | 消息框的取消按钮 | messagebox.showinfo(cancel="cancel") |
buttons | 消息框的按钮列表 | messagebox.showinfo(buttons=("yes", "no")) |
特别注意:
老的版本中提供command 消息框的回调函数 :messagebox.showinfo(command=callback)
,但新的tkinter版本中没有了,如果你采用了老的版本的代码可能就会报错。新版本中没有了command参数了,如果想要通过信息框的选择来调用某些指令,那就只能根据消息框的选择结果来另外调用了。
以下是一些使用MessageBox的代码实例:
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
#显示一个信息框
messagebox.showinfo(parent=root,title="提示", message="这是一个提示", icon="info", type="okcancel", detail="这是详细信息", default="ok")
# 显示一个警告框
messagebox.showwarning(title="警告", message="这是一个警告", icon="warning", type="yesno", parent=root, detail="这是详细信息", default="yes" )
# 显示一个错误框
messagebox.showerror(title="错误", message="这是一个错误", icon="error", type="retrycancel", parent=root, detail="这是详细信息", default="retry" )
# 显示一个错误框
messagebox.showerror(title="错误", message="这是一个错误", icon="error", type="abortretryignore", parent=root, detail="这是详细信息", default="retry" )
# 显示一个询问框
result = messagebox.askquestion(title="询问", message="这是一个询问", icon="question", type="yesnocancel", parent=root, detail="这是详细信息", default="yes")
if result == "yes":
print("选择了是")
else:
print("选择了否")
root.mainloop()
这里我们是为了演示,所以仅仅展示了消息框的弹出,常规情况下都是有事件来触发这些消息框弹出的,比如点击某个按钮,代码如:
tk.Button(root, text='消息提示框', command=showinfomsg).pack(padx=10,pady=5, anchor='w')
# 信息消息框
def showinfomsg():
msg1 = messagebox.showinfo(parent=root,title="消息提示", message="欢迎来到tkinter消息框的设置")
print(msg1)
特别注意MessageBox和Message是两个不同的类,Message是以控件方式放入容器中,它的使用方法与Label类似,但是使用起来更灵活,可自动分行,都是要在最后使用pack放进父容器root中:
Message(父容器,各种选项)
代码举例如下:
import tkinter as tk
root = tk.Tk()
var = tk.StringVar()
var.set("我是小妖怪,快活又自在!")
message = tk.Message(root, bg="lightyellow", textvariable=var, font="times 12 italic")
message.pack(padx=10, pady=10)
三、spinbox
Spinbox用于创建一个带有上下箭头的输入框,用户可以通过点击箭头来增加或减少输入框中的值。它通常用于需要限制用户输入范围的场景,例如选择年龄、分数等。
属性/事件 | 描述 | 代码实例 |
---|---|---|
from_ | Spinbox的最小值 | spinbox = Spinbox(from_=0, to=10) |
to | Spinbox的最大值 | spinbox = Spinbox(from_=0, to=10) |
increment | Spinbox的增量 | spinbox = Spinbox(from_=0, to=10, increment=2) |
values | Spinbox的值列表 | spinbox = Spinbox(values=(0, 2, 4, 6, 8, 10)) |
wrap | Spinbox是否循环 | spinbox = Spinbox(from_=0, to=10, wrap=True) |
state | Spinbox的状态(normal或readonly) | spinbox = Spinbox(state="readonly") |
textvariable | Spinbox的值绑定到变量 | spinbox = Spinbox(textvariable=var) |
command | Spinbox的值改变时的回调函数 | spinbox = Spinbox(command=callback) |
以下是一些使用Spinbox的代码实例:
import tkinter as tk
def callback():
print("当前值为:", spinbox.get())
root = tk.Tk()
# 创建一个Spinbox,范围从0到10,增量为2
spinbox = tk.Spinbox(root, from_=0, to=10, increment=2)
spinbox.pack()
# 创建一个Spinbox,值列表为(0, 2, 4, 6, 8, 10)
spinbox = tk.Spinbox(root, values=(0, 2, 4, 6, 8, 10))
spinbox.pack()
# 创建一个Spinbox,范围从0到10,循环
spinbox = tk.Spinbox(root, from_=0, to=10, wrap=True)
spinbox.pack()
# 创建一个Spinbox,状态为只读
spinbox = tk.Spinbox(root, state="readonly")
spinbox.pack()
# 创建一个Spinbox,值绑定到变量
var = tk.StringVar()
spinbox = tk.Spinbox(root, textvariable=var)
spinbox.pack()
# 创建一个Spinbox,值改变时的回调函数
spinbox = tk.Spinbox(root, command=callback)
spinbox.pack()
root.mainloop()
四、Progressbar
Progressbar用于显示一个进度条,通常用于表示某个任务的完成进度。它通常用于需要长时间等待的场景,例如文件下载、数据处理等。
以下是一些使用Progressbar的代码实例:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
# 创建一个Progressbar,范围从0到100
progressbar = ttk.Progressbar(root, orient="horizontal", length=200, mode="determinate")
progressbar.pack()
# 设置Progressbar的值
progressbar["value"] = 50
root.mainloop()
属性/事件 | 描述 | 代码实例 |
---|---|---|
orient | Progressbar的方向(horizontal或vertical) | progressbar = ttk.Progressbar(root, orient="horizontal") |
length | Progressbar的长度 | progressbar = ttk.Progressbar(root, length=200) |
mode | Progressbar的模式(determinate或indeterminate) | progressbar = ttk.Progressbar(root, mode="determinate") |
value | Progressbar的当前值 | progressbar["value"] = 50 |
maximum | Progressbar的最大值 | progressbar["maximum"] = 100 |
variable | Progressbar的值变量 | progressbar["variable"] = progress_var |
command | Progressbar的值改变时的回调函数 | progressbar["command"] = callback |
五、PanedWindow
PanedWindow用于创建一个可分割的窗口,可以将多个子控件放置在不同的区域中。它通常用于需要将界面分成多个部分的场景,例如左侧导航栏、上下方框等。
以下是一些使用PanedWindow的代码实例:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
# 创建一个PanedWindow
panedwindow = ttk.PanedWindow(root, orient="horizontal")
panedwindow.pack(fill="both", expand=True)
# 添加两个子控件
frame1 = ttk.Frame(panedwindow, width=200, height=200, relief="sunken", borderwidth=2)
frame2 = ttk.Frame(panedwindow, width=200, height=200, relief="sunken", borderwidth=2)
panedwindow.add(frame1)
panedwindow.add(frame2)
root.mainloop()
属性/事件 | 描述 | 代码实例 |
---|---|---|
orient | PanedWindow的方向(horizontal或vertical) | panedwindow = ttk.PanedWindow(root, orient="horizontal") |
firstsplitter | 是否显示第一个分隔条 | panedwindow["firstsplitter"] = False |
sashrelief | 分隔条的样式(flat、groove、raised、ridge、solid或sunken) | panedwindow["sashrelief"] = "groove" |
sashwidth | 分隔条的宽度 | panedwindow["sashwidth"] = 5 |
sashpad | 分隔条与子控件之间的间距 | panedwindow["sashpad"] = 5 |
handlesize | 分隔条的大小 | panedwindow["handlesize"] = 10 |
handlepad | 分隔条与子控件之间的间距 | panedwindow["handlepad"] = 5 |
proxybackground | 代理背景颜色 | panedwindow["proxybackground"] = "red" |
proxyborderwidth | 代理边框宽度 | panedwindow["proxyborderwidth"] = 2 |
proxyrelief | 代理边框样式 | panedwindow["proxyrelief"] = "groove" |
proxywidth | 代理宽度 | panedwindow["proxywidth"] = 200 |
proxyheight | 代理高度 | panedwindow["proxyheight"] = 200 |
六、各类对话框dialog
虽然对话框不算做是控件,但相比messagebox来说,它能算作控件,那么dialog也能勉强列入了。所以这里我就自作主张将它算进来了。毕竟我们做应用的时候也是应用得比较多的。
在Tkinter中,除了MessageBox外,还有多种对话框可供使用,包括文件对话框(file dialog)、颜色选择对话框(color chooser dialog)和字体选择对话框(font chooser dialog)。以下是这些对话框的一些常用属性和事件的表格说明。
对话框类型 | 属性/事件 | 描述 | 代码实例 |
---|---|---|---|
文件对话框 | filename | 选择的文件名 | filedialog.askopenfilename() |
文件对话框 | initialdir | 初始目录 | filedialog.askopenfilename(initialdir="/path/to/dir") |
文件对话框 | title | 对话框标题 | filedialog.askopenfilename(title="Open File") |
文件对话框 | filetypes | 文件类型过滤器 | filedialog.askopenfilename(filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")]) |
颜色选择对话框 | color | 选定的颜色值 | colorchooser.askcolor(color="#FF0000") |
颜色选择对话框 | title | 对话框标题 | colorchooser.askcolor(title="Choose Color") |
颜色选择对话框 | initialcolor | 初始颜色 | colorchooser.askcolor(initialcolor="#FF0000") |
字体选择对话框 | font | 选定的字体 | fontchooser.askfont(font=("Arial", 12)) |
字体选择对话框 | title | 对话框标题 | fontchooser.askfont(title="Choose Font") |
字体选择对话框 | initialfont | 初始字体 | fontchooser.askfont(initialfont=("Arial", 12)) |
以下是使用这些对话框的一些代码示例:
import tkinter as tk
from tkinter import filedialog, colorchooser, font
from tkinter.font import Font
def open_file():
filename = filedialog.askopenfilename(initialdir="/path/to/dir", title="Open File", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])
print(f"Selected file: {filename}")
def choose_color():
color_code = colorchooser.askcolor(color="#FF0000", title="Choose Color", initialcolor="#FF0000")
print(f"Selected color: {color_code}")
def choose_font():
font_selected = fontchooser.askfont(font=("Arial", 12), title="Choose Font", initialfont=("Arial", 12))
print(f"Selected font: {font_selected}")
root = tk.Tk()
# 打开文件对话框
button = tk.Button(root, text="Open File", command=open_file)
button.pack()
# 打开颜色选择对话框
button = tk.Button(root, text="Choose Color", command=choose_color)
button.pack()
# 打开字体选择对话框
button = tk.Button(root, text="Choose Font", command=choose_font)
button.pack()
root.mainloop()
注意:filedialog
, colorchooser
, fontchooser
等模块需要从tkinter
包中导入。
七、tkinter中控件的快捷键的实现方法
快捷键是我们编写软件的刚需,所以这里在最后一片博文简单介绍一下快捷键的代码编写。
import tkinter as tk
def clear_input(event=None):
# 清除输入框内容的函数
input_entry.delete(0, tk.END )
def process_data():
# 处理数据的函数
input_text = input_entry.get()
# 这里可以添加你的数据处理逻辑
output_text = "Processed Data: " + input_text
output_label.config(text=output_text)
# 创建主窗口
root = tk.Tk()
root.title("General Engineering Tool")
# 创建输入框
input_label = tk.Label(root, text="Input:")
input_label.pack()
input_entry = tk.Entry(root)
input_entry.pack()
# 创建输出标签
output_label = tk.Label(root, text="")
output_label.pack()
# 创建清除按钮,设置图标和文本对齐方式
clear_button = tk.Button(root, text="Clear", command=clear_input, compound=tk.CENTER )
clear_button.pack()
root.bind('<Alt-e>', clear_input ) # 监听Alt+E快捷键
# 创建处理按钮
process_button = tk.Button(root, text="Process", command=process_data)
process_button.pack()
# 运行主循环
root.mainloop()
文章随时可能更新,请关注文章原出处: https://blog.csdn.net/haigear/article/details/137359928
这篇tkinter控件使用教程是最后一篇,如果文中有什么遗漏和错误指出,请大家指正。如果大家感兴趣的话,我们后面可以继续来介绍ttkbootstrap,毕竟tkinter的UI是标准化的控件,美观度上还是多少有些遗憾的。欢迎大家关注!
附参考网站以备大家翻阅,站内都有详细的介绍:
Python官方网站
C语言中文网