本文假定你是有Python编程基础的童鞋,否则你需要首先学习Python相关的语法和学会如何搭建Python的编程环境。 我们都知道,python相对于c#或者c++而言有一个最大的弱势,那就是没有可视化开发界面,所以国内外有很多的辅助界面开发的项目,有的借助于web页面,有的借助QT-designer有的借助微软的VB做了插件,有的直接写了一个类UI开发的辅助软件。无论是哪个方式,其实都离不开tkinter。所以,我们这里分几节开始介绍python的控件使用方法。 控件的显示必须有一个父容器,所以,我们也将父容器一起介绍。
一、主界面运行
- 1、最简单的混合模式
- 2、MVC设计模式
- 二、按钮button
- 三、文本标签
- 四、文本输入框inputTextBox
- 五、文本框TextEditBox
- 六、下拉框comboBox
文章随时可能更新,请关注文章原出处:
为了让大家有一个整体观,我这里将tkinter的主要控件列表说明如下:
以下是使用Markdown格式表格的方式显示Tkinter控件的名称、主要功能和主要应用场景:
控件名称 | 主要功能 | 主要应用场景 |
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(模型-视图-控制器)设计模式的方式。以下是两种模式的详细介绍和代码实例:
1、最简单的混合模式
在混合模式中,我们直接在主窗口类中创建和管理所有的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()
2、MVC设计模式
我们都知道,所谓的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设计模式,后面我们会专门开设专题来讲解,请继续关注后面的博客更新。
有了前面的基础知识了,我们可以开始正式进入控件的了解了。
二、按钮button
在Tkinter中,按钮(Button)是一种常用的用户界面元素,用于触发特定的操作或事件。下面是一个关于Tkinter中按钮使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
text | 按钮上显示的文本 |
|
command | 按钮被点击时执行的函数 |
|
width | 按钮的宽度(以字符为单位) |
|
height | 按钮的高度(以字符为单位) |
|
state | 按钮的状态(normal或disabled) |
|
relief | 按钮的边框样式(flat或raised) |
|
bg | 按钮的背景颜色 |
|
fg | 按钮的前景颜色(即文本颜色) |
|
font | 按钮的字体 |
|
padx | 按钮内部的水平填充 |
|
pady | 按钮内部的垂直填充 |
|
cursor | 鼠标悬停在按钮上时的光标样式 |
|
activebackground | 按钮被按下时的背景颜色 |
|
activeforeground | 按钮被按下时的前景颜色(即文本颜色) |
|
overrelief | 鼠标悬停在按钮上时的边框样式 |
|
anchor | 按钮文本的对齐方式(N, NE, E, SE, S, SW, W, NW, or 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 | 标签上显示的文本 |
|
image | 标签上显示的图像 |
|
width | 标签的宽度(以字符为单位) |
|
height | 标签的高度(以字符为单位) |
|
bg | 标签的背景颜色 |
|
fg | 标签的前景颜色(即文本颜色) |
|
font | 标签的字体 |
|
padx | 标签内部的水平填充 |
|
pady | 标签内部的垂直填充 |
|
relief | 标签的边框样式(flat或raised) |
|
anchor | 标签文本的对齐方式(N, NE, E, SE, S, SW, W, NW, or CENTER) |
|
compound | 当使用图像和文本时,指定如何将它们组合在一起(如"center",“left”,"right"等) |
|
cursor | 鼠标悬停在标签上时的光标样式 |
|
borderwidth | 标签的边框宽度 |
|
highlightbackground | 标签被选中时的背景颜色 |
|
highlightcolor | 标签周围高亮区域的 color |
|
underline | 是否在标签文本下方添加下划线 |
|
以下是一个简单的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!",并设置了字体、背景颜色以及内边填充。
四、文本输入框inputTextBox
在Tkinter中,文本输入框(Entry)主要用于接收用户输入的文本信息。以下是关于Tkinter中文本输入框的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
text | 显示在文本输入框中的初始内容 |
|
width | 文本输入框的宽度(以字符为单位) |
|
relief | 文本输入框的边框样式(flat, groove, raised, ridge, solid, or sunken) |
|
bg | 文本输入框的背景颜色 |
|
fg | 文本输入框的前景颜色(即文本颜色) |
|
font | 文本输入框的字体 |
|
padx | 文本输入框内部的水平填充 |
|
pady | 文本输入框内部的垂直填充 |
|
validatecommand | 验证命令,用于控制用户输入 |
|
vcmd | 当validatecommand被触发时调用的函数 |
|
x | 文本输入框左上角的x坐标 |
|
y | 文本输入框左上角的y坐标 |
|
state | 文本输入框的状态(normal或disabled) |
|
show | 是否显示密码字符(星号)来代替实际输入内容 |
|
borderwidth | 文本输入框的边框宽度 |
|
以下是一个简单的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")
五、文本框TextEditBox
在Tkinter中,文本框(Text)提供了一个多行文本输入区域,允许用户输入和编辑多行文本。以下是关于Tkinter中文本框的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
text | 显示在文本框中的初始内容 |
|
width | 文本框的宽度(以字符为单位) |
|
height | 文本框的高度(以字符为单位) |
|
wrap | 指定文本如何换行(none, char, word, or ellipses) |
|
bg | 文本框的背景颜色 |
|
fg | 文本框的前景颜色(即文本颜色) |
|
font | 文本框的字体 |
|
padx | 文本框内部的水平填充 |
|
pady | 文本框内部的垂直填充 |
|
relief | 文本框的边框样式(flat, groove, raised, ridge, solid, or sunken) |
|
borderwidth | 文本框的边框宽度 |
|
xscrollcommand | 指定一个函数或方法来控制水平滚动条 |
|
yscrollcommand | 指定一个函数或方法来控制垂直滚动条 |
|
state | 文本框的状态(normal或disabled) |
|
insert | 插入文本的位置和方法 |
|
delete | 删除文本的范围和方法 |
|
select_range | 选择文本的范围 |
|
tag_configure | 配置标签的属性,如颜色、字体等 |
|
tag_remove | 移除标签 |
|
以下是一个简单的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函数,输出用户输入的内容。
我们需要注意的是,文本输入框与文本框是有区别的,文本框可以输入多行文字,是带滑动条的。
六、下拉框comboBox
在Tkinter中,下拉框(Combobox)提供了一个可以让用户从下拉列表中选择值的控件。以下是关于Tkinter中下拉框的使用、属性和事件的表格说明:
属性/事件 | 描述 | 代码示例 |
values | 下拉列表中的选项值 |
|
text | 下拉框中显示的当前选项 |
|
state | 下拉框的状态(readonly 或 normal) |
|
current() | 返回当前选中项的值 |
|
set(value) | 设置下拉框中显示的当前选项 |
|
get() | 获取当前选中项的值 |
|
postcommand | 当下拉框的选项改变时触发的事件 |
|
validate | 验证输入是否有效(focusLost 或 focusGained) |
|
vcmd | 当validate被触发时调用的函数 |
|
font | 下拉框的字体 |
|
width | 下拉框的宽度(以字符为单位) |
|
height | 下拉框的高度(以字符为单位) |
|
justify | 文本对齐方式(left, right, center) |
|
padding | 下拉框内部的填充 |
|
background | 下拉框的背景颜色 |
|
foreground | 下拉框的前景颜色(即文本颜色) |
|
bordercolor | 下拉框的边框颜色 |
|
relief | 下拉框的边框样式(flat, groove, raised, ridge, solid, or sunken) |
|
以下是一个简单的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函数,输出用户选择的值。