赞
踩
本文假定你是有Python编程基础的童鞋,否则你需要首先学习Python相关的语法和学会如何搭建Python的编程环境。
我们都知道,python相对于c#或者c++而言有一个最大的弱势,那就是没有可视化开发界面,所以国内外有很多的辅助界面开发的项目,有的借助于web页面,有的借助QT-designer有的借助微软的VB做了插件,有的直接写了一个类UI开发的辅助软件。无论是哪个方式,其实都离不开tkinter。所以,我们这里分几节开始介绍python的控件使用方法。
控件的显示必须有一个父容器,所以,我们也将父容器一起介绍。
控件名称 | 主要功能 | 主要应用场景 |
---|---|---|
Button | 创建可点击按钮,执行特定的命令或操作。 | 任何需要用户交互执行操作的场景。 |
Canvas | 提供一个绘图区域,可以绘制图形和处理位图等图像。 | 需要自定义图形展示或图像编辑的场景。 |
Checkbutton | 创建复选框,允许用户从多个选项中选择多个。 | 需要提供多个独立选项供用户选择的情况。 |
Entry | 允许用户输入一行文本。 | 需要接收简短用户输入的表单场景。 |
Frame | 用作其他控件的容器,有助于组织和管理界面上的小部件。 | 需要对界面元素进行分组或分隔的场景。 |
Label | 主要用于显示文本信息,也可以用于显示图像。 | 需要展示静态文本或图像信息的场景。 |
Listbox | 显示一列选项供用户选择。 | 需要列出多个选项供用户浏览和选择的情况。 |
Menu | 用于创建下拉菜单和上下文菜单。 | 需要提供菜单栏或快捷菜单的应用。 |
Messagebox | 用于显示多行文本信息。 | 需要展示较长文本信息或消息提示的场景。 |
OptionMenu | 创建一个带有下拉列表的菜单,供用户选择选项。 | 需要提供一组固定选项供用户选择的情况。 |
PanedWindow | 将界面划分为多个区域,每个区域可以包含不同的内容。 | 需要多个并列显示区域的复杂布局场景。 |
Progressbar | 用于显示任务的完成进度。 | 需要向用户展示操作进度的长时间运行任务。 |
Radiobutton | 单选按钮,用于在一组选项中选择一个。 | 需要用户从一组互斥选项中选择一个的情况。 |
Scale | 滑块控件,允许用户通过滑动选择数值或范围。 | 需要用户通过滑动条选择数值的场景。 |
Scrollbar | 为其他控件(如Listbox或Text)提供滚动功能。 | 当内容超出可视区域时,需要滚动查看的场景。 |
Spinbox | 输入框控件,允许用户输入数字并可以通过上下箭头进行增减。 | 需要用户选择特定数值,且需要微调的场景。 |
Sizegrip | 用于调整窗口大小。 | 通常位于窗口的右下角,让用户可以调整窗口的大小。 |
Text | 提供一个多行文本编辑区域。 | 需要多行文本输入和编辑的场景。 |
Toplevel | 顶级窗口控件,用于创建独立的顶层窗口。 | 需要打开新的独立窗口的场景。 |
Treeview | 树形视图控件,用于展示层次化的数据结构。 | 需要展示具有层级关系的数据,如文件浏览器。 |
上述表格是按照字母顺序排列,但我接下来的控件教程说明是按照控件的使用频率来介绍的。
参考官方文档:https://docs.python.org/zh-cn/3/library/tkinter.ttk.html
Tkinter中主界面的初始化可以通过两种不同的模式来实现,一种是最简单的混合模式,另一种则是可以体现MVC(模型-视图-控制器)设计模式的方式。以下是两种模式的详细介绍和代码实例:
在混合模式中,我们直接在主窗口类中创建和管理所有的GUI组件。这种方式简单直接,但不利于代码的扩展和维护,因为逻辑和显示紧密耦合在一起。
import tkinter as tk
class SimpleApp:
def __init__(self, root):
self.root = root
self.button = tk.Button(root, text="点击我!", command=self.on_button_click)
self.button.pack()
def on_button_click(self):
print("啊啊啊啊,我被点击了,不是电击了!")
if __name__ == "__main__":
root = tk.Tk()
app = SimpleApp(root)
root.mainloop()
我们都知道,所谓的MVC设计模式即将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型负责数据和业务逻辑,视图负责显示数据,而控制器负责处理用户输入并更新模型和视图。
import tkinter as tk class Model: def __init__(self): self.data = "Hello, Tkinter!" class View: def __init__(self, master): self.master = master self.label = tk.Label(master, text="") self.label.pack() def update_label(self, data): self.label.config(text=data) class Controller: def __init__(self, master): self.model = Model() self.view = View(master) self.view.update_label(self.model.data) self.button = tk.Button(master, text="Update", command=self.update_view) self.button.pack() def update_view(self): self.view.update_label(self.model.data) if __name__ == "__main__": root = tk.Tk() app = Controller(root) root.mainloop()
在MVC模式的代码示例中,Model
类负责存储数据,View
类负责显示数据,而Controller
类则负责响应用户的点击事件,并更新视图。这种方式使得代码的结构更加清晰,各个部分的职责更加明确,有利于代码的维护和扩展。
实际这个模式对于小的项目也并非很实用,尤其是编写一个小巧的工具,那就可以直接用混合模式即可。
初学者我还是建议使用混合模式,先了解tkinter的原理和方法。有关Python中的MVC设计模式,后面我们会专门开设专题来讲解,请继续关注后面的博客更新。
有了前面的基础知识了,我们可以开始正式进入控件的了解了。
在Tkinter中,按钮(Button)是一种常用的用户界面元素,用于触发特定的操作或事件。下面是一个关于Tkinter中按钮使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
---|---|---|
text | 按钮上显示的文本 | button = tk.Button(text="点击我") |
command | 按钮被点击时执行的函数 | button = tk.Button(text="点击我", command=my_function) |
width | 按钮的宽度(以字符为单位) | button = tk.Button(text="点击我", width=10) |
height | 按钮的高度(以字符为单位) | button = tk.Button(text="点击我", height=2) |
state | 按钮的状态(normal或disabled) | button.config(state="disabled") |
relief | 按钮的边框样式(flat或raised) | button = tk.Button(text="点击我", relief="raised") |
bg | 按钮的背景颜色 | button = tk.Button(text="点击我", bg="red") |
fg | 按钮的前景颜色(即文本颜色) | button = tk.Button(text="点击我", fg="blue") |
font | 按钮的字体 | button = tk.Button(text="点击我", font=("Arial", 12)) |
padx | 按钮内部的水平填充 | button = tk.Button(text="点击我", padx=10) |
pady | 按钮内部的垂直填充 | button = tk.Button(text="点击我", pady=5) |
cursor | 鼠标悬停在按钮上时的光标样式 | button.config(cursor="hand2") |
activebackground | 按钮被按下时的背景颜色 | button = tk.Button(text="点击我", activebackground="yellow") |
activeforeground | 按钮被按下时的前景颜色(即文本颜色) | button = tk.Button(text="点击我", activeforeground="green") |
overrelief | 鼠标悬停在按钮上时的边框样式 | button = tk.Button(text="点击我", overrelief="groove") |
anchor | 按钮文本的对齐方式(N, NE, E, SE, S, SW, W, NW, or CENTER) | button = tk.Button(text="点击我", anchor="center") |
以下是一个简单的Tkinter按钮代码实例:
import tkinter as tk
def test_function():
print("啊啊啊啊啊,我被点击了!")
root = tk.Tk()
button = tk.Button(root, text="点击我", command=test_function)
button.pack()
root.mainloop()
在这个例子中,我们创建了一个包含一个按钮的简单窗口。当用户点击按钮时,会调用test_function
函数,输出一条消息。
小技巧:
如果我们要修改按钮的文字,可以这样来,通过实例的属性:
button["text"]="按钮的文字1"
button.setText("按钮的文字2")
获取就只能通过属性方式:
buttontext=button["text"]
在Tkinter中,标签(Label)主要用于显示文本或图像。以下是关于Tkinter中标签的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
---|---|---|
text | 标签上显示的文本 | label = tk.Label(text="Hello, Tkinter!") |
image | 标签上显示的图像 | label = tk.Label(image=my_image) |
width | 标签的宽度(以字符为单位) | label = tk.Label(text="Hello", width=20) |
height | 标签的高度(以字符为单位) | label = tk.Label(text="Hello", height=3) |
bg | 标签的背景颜色 | label = tk.Label(text="Hello", bg="red") |
fg | 标签的前景颜色(即文本颜色) | label = tk.Label(text="Hello", fg="blue") |
font | 标签的字体 | label = tk.Label(text="Hello", font=("Arial", 12)) |
padx | 标签内部的水平填充 | label = tk.Label(text="Hello", padx=10) |
pady | 标签内部的垂直填充 | label = tk.Label(text="Hello", pady=5) |
relief | 标签的边框样式(flat或raised) | label = tk.Label(text="Hello", relief="groove") |
anchor | 标签文本的对齐方式(N, NE, E, SE, S, SW, W, NW, or CENTER) | label = tk.Label(text="Hello", anchor="center") |
compound | 当使用图像和文本时,指定如何将它们组合在一起(如"center",“left”,"right"等) | label = tk.Label(text="Hello", image=my_image, compound="left") |
cursor | 鼠标悬停在标签上时的光标样式 | label.config(cursor="hand2") |
borderwidth | 标签的边框宽度 | label = tk.Label(text="Hello", borderwidth=2) |
highlightbackground | 标签被选中时的背景颜色 | label = tk.Label(text="Hello", highlightbackground="yellow") |
highlightcolor | 标签周围高亮区域的 color | label = tk.Label(text="Hello", highlightcolor="green") |
underline | 是否在标签文本下方添加下划线 | label = tk.Label(text="Hello", underline=1) |
以下是一个简单的Tkinter标签代码实例:
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text="Hello, Tkinter!", font=("Arial", 16), bg="lightgray", padx=10, pady=10)
label.pack()
root.mainloop()
在这个例子中,我们创建了一个包含一个标签的简单窗口。标签显示了文本"Hello, Tkinter!",并设置了字体、背景颜色以及内边填充。
在Tkinter中,文本输入框(Entry)主要用于接收用户输入的文本信息。以下是关于Tkinter中文本输入框的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
---|---|---|
text | 显示在文本输入框中的初始内容 | entry = tk.Entry(text="默认文本") |
width | 文本输入框的宽度(以字符为单位) | entry = tk.Entry(width=30) |
relief | 文本输入框的边框样式(flat, groove, raised, ridge, solid, or sunken) | entry = tk.Entry(relief="groove") |
bg | 文本输入框的背景颜色 | entry = tk.Entry(bg="lightyellow") |
fg | 文本输入框的前景颜色(即文本颜色) | entry = tk.Entry(fg="blue") |
font | 文本输入框的字体 | entry = tk.Entry(font=("Arial", 12)) |
padx | 文本输入框内部的水平填充 | entry = tk.Entry(padx=5) |
pady | 文本输入框内部的垂直填充 | entry = tk.Entry(pady=5) |
validatecommand | 验证命令,用于控制用户输入 | entry = tk.Entry(validate="key", validatecommand=validate_cmd) |
vcmd | 当validatecommand被触发时调用的函数 | entry = tk.Entry(vcmd=validate_callback) |
x | 文本输入框左上角的x坐标 | entry.place(x=50, y=50) |
y | 文本输入框左上角的y坐标 | entry.place(x=50, y=50) |
state | 文本输入框的状态(normal或disabled) | entry.config(state="disabled") |
show | 是否显示密码字符(星号)来代替实际输入内容 | entry = tk.Entry(show="*") |
borderwidth | 文本输入框的边框宽度 | entry = tk.Entry(borderwidth=2) |
以下是一个简单的Tkinter文本输入框代码实例:
import tkinter as tk
def on_submit():
print("输入的内容是:", entry.get())
root = tk.Tk()
entry = tk.Entry(root, width=30, bg="lightyellow", fg="blue", font=("Arial", 12), validate="key", vcmd=on_submit)
entry.pack()
submit_button = tk.Button(root, text="提交", command=on_submit)
submit_button.pack()
root.mainloop()
在这个例子中,我们创建了一个包含一个文本输入框和一个按钮的简单窗口。用户可以在文本输入框中输入文本,点击"提交"按钮后,会调用on_submit
函数,输出用户输入的内容。
小技巧:
如果我们要通过代码动态修改文本输入框中的内容,可以有两种方式,一通过绑定的变量set,二通过setText
entry= Entry(父容器, textvariable=self.TextVar)
TextVar.set("welcome to python")
entry .setText("hello python")
在Tkinter中,文本框(Text)提供了一个多行文本输入区域,允许用户输入和编辑多行文本。以下是关于Tkinter中文本框的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
---|---|---|
text | 显示在文本框中的初始内容 | text = tk.Text(root, text="默认文本") |
width | 文本框的宽度(以字符为单位) | text = tk.Text(root, width=30) |
height | 文本框的高度(以字符为单位) | text = tk.Text(root, height=10) |
wrap | 指定文本如何换行(none, char, word, or ellipses) | text = tk.Text(root, wrap="word") |
bg | 文本框的背景颜色 | text = tk.Text(root, bg="lightyellow") |
fg | 文本框的前景颜色(即文本颜色) | text = tk.Text(root, fg="blue") |
font | 文本框的字体 | text = tk.Text(root, font=("Arial", 12)) |
padx | 文本框内部的水平填充 | text = tk.Text(root, padx=5) |
pady | 文本框内部的垂直填充 | text = tk.Text(root, pady=5) |
relief | 文本框的边框样式(flat, groove, raised, ridge, solid, or sunken) | text = tk.Text(root, relief="groove") |
borderwidth | 文本框的边框宽度 | text = tk.Text(root, borderwidth=2) |
xscrollcommand | 指定一个函数或方法来控制水平滚动条 | text = tk.Text(root, xscrollcommand=hbar.set) |
yscrollcommand | 指定一个函数或方法来控制垂直滚动条 | text = tk.Text(root, yscrollcommand=vbar.set) |
state | 文本框的状态(normal或disabled) | text.config(state="disabled") |
insert | 插入文本的位置和方法 | text.insert(INSERT, "Hello, Tkinter!") |
delete | 删除文本的范围和方法 | text.delete("1.0", "2.0") |
select_range | 选择文本的范围 | text.tag_add("sel", "1.0", "2.0") |
tag_configure | 配置标签的属性,如颜色、字体等 | text.tag_configure("bold", font=("Arial", 12, "bold")) |
tag_remove | 移除标签 | text.tag_remove("bold", "1.0", "2.0") |
以下是一个简单的Tkinter文本框代码实例:
import tkinter as tk
def on_submit():
print("输入的内容是:", text_widget.get("1.0", tk.END))
root = tk.Tk()
text_widget = tk.Text(root, width=30, height=10, bg="lightyellow", fg="blue", font=("Arial", 12))
text_widget.pack(padx=10, pady=10)
submit_button = tk.Button(root, text="提交", command=on_submit)
submit_button.pack()
root.mainloop()
在这个例子中,我们创建了一个包含一个文本框和一个按钮的简单窗口。用户可以在文本框中输入多行文本,点击"提交"按钮后,会调用on_submit
函数,输出用户输入的内容。
我们需要注意的是,文本输入框与文本框是有区别的,文本框可以输入多行文字,是带滑动条的。
在Tkinter中,下拉框(Combobox)提供了一个可以让用户从下拉列表中选择值的控件。以下是关于Tkinter中下拉框的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
---|---|---|
values | 下拉列表中的选项值 | combo = ttk.Combobox(values=["选项1", "选项2", "选项3"]) |
text | 下拉框中显示的当前选项 | combo = ttk.Combobox(text="选项1") |
state | 下拉框的状态(readonly 或 normal) | combo.state(['readonly']) |
current() | 返回当前选中项的值 | current_value = combo.current() |
set(value) | 设置下拉框中显示的当前选项 | combo.set("选项2") |
get() | 获取当前选中项的值 | selected_value = combo.get() |
postcommand | 当下拉框的选项改变时触发的事件 | combo = ttk.Combobox(postcommand=update_value) |
validate | 验证输入是否有效(focusLost 或 focusGained) | combo.validate("focusLost") |
vcmd | 当validate被触发时调用的函数 | combo.vcmd(validate_callback) |
font | 下拉框的字体 | combo = ttk.Combobox(font=("Arial", 12)) |
width | 下拉框的宽度(以字符为单位) | combo = ttk.Combobox(width=30) |
height | 下拉框的高度(以字符为单位) | combo = ttk.Combobox(height=10) |
justify | 文本对齐方式(left, right, center) | combo = ttk.Combobox(justify="center") |
padding | 下拉框内部的填充 | combo = ttk.Combobox(padding=5) |
background | 下拉框的背景颜色 | combo = ttk.Combobox(background="lightblue") |
foreground | 下拉框的前景颜色(即文本颜色) | combo = ttk.Combobox(foreground="black") |
bordercolor | 下拉框的边框颜色 | combo = ttk.Combobox(bordercolor="gray") |
relief | 下拉框的边框样式(flat, groove, raised, ridge, solid, or sunken) | combo = ttk.Combobox(relief="groove") |
以下是一个简单的Tkinter下拉框代码实例:
import tkinter as tk
from tkinter import ttk
def on_submit():
print("选择的值是:", combo.get())
root = tk.Tk()
combo = ttk.Combobox(root, values=["选项1", "选项2", "选项3"], text="选项1", state="readonly", postcommand=on_submit)
combo.pack(padx=10, pady=10)
root.mainloop()
在这个例子中,我们创建了一个包含一个下拉框的简单窗口。用户可以从下拉列表中选择一个选项,当选项改变时,会调用on_submit
函数,输出用户选择的值。
文章随时可能更新,请关注文章原出处: https://blog.csdn.net/haigear/article/details/137281370
这篇介绍先到这里为止,我们后面继续!
tkinter控件教程使用说明(二)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。