当前位置:   article > 正文

tkinter控件教程使用说明(一)_tkinter 表格

tkinter 表格

本文假定你是有Python编程基础的童鞋,否则你需要首先学习Python相关的语法和学会如何搭建Python的编程环境。
我们都知道,python相对于c#或者c++而言有一个最大的弱势,那就是没有可视化开发界面,所以国内外有很多的辅助界面开发的项目,有的借助于web页面,有的借助QT-designer有的借助微软的VB做了插件,有的直接写了一个类UI开发的辅助软件。无论是哪个方式,其实都离不开tkinter。所以,我们这里分几节开始介绍python的控件使用方法。
控件的显示必须有一个父容器,所以,我们也将父容器一起介绍。


文章随时可能更新,请关注文章原出处: https://blog.csdn.net/haigear/article/details/137281370
为了让大家有一个整体观,我这里将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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在MVC模式的代码示例中,Model类负责存储数据,View类负责显示数据,而Controller类则负责响应用户的点击事件,并更新视图。这种方式使得代码的结构更加清晰,各个部分的职责更加明确,有利于代码的维护和扩展。
实际这个模式对于小的项目也并非很实用,尤其是编写一个小巧的工具,那就可以直接用混合模式即可。
初学者我还是建议使用混合模式,先了解tkinter的原理和方法。有关Python中的MVC设计模式,后面我们会专门开设专题来讲解,请继续关注后面的博客更新。

有了前面的基础知识了,我们可以开始正式进入控件的了解了。

二、按钮button

在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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这个例子中,我们创建了一个包含一个按钮的简单窗口。当用户点击按钮时,会调用test_function函数,输出一条消息。

小技巧:
如果我们要修改按钮的文字,可以这样来,通过实例的属性:

 button["text"]="按钮的文字1"
 button.setText("按钮的文字2")
  • 1
  • 2

获取就只能通过属性方式:

 buttontext=button["text"]
  • 1

三、文本标签

在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标签周围高亮区域的 colorlabel = 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这个例子中,我们创建了一个包含一个标签的简单窗口。标签显示了文本"Hello, Tkinter!",并设置了字体、背景颜色以及内边填充。

四、文本输入框inputTextBox

在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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这个例子中,我们创建了一个包含一个文本输入框和一个按钮的简单窗口。用户可以在文本输入框中输入文本,点击"提交"按钮后,会调用on_submit函数,输出用户输入的内容。

小技巧:
如果我们要通过代码动态修改文本输入框中的内容,可以有两种方式,一通过绑定的变量set,二通过setText

entry= Entry(父容器, textvariable=self.TextVar)
TextVar.set("welcome to python")
  • 1
  • 2
entry .setText("hello python")
  • 1

五、文本框TextEditBox

在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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这个例子中,我们创建了一个包含一个文本框和一个按钮的简单窗口。用户可以在文本框中输入多行文本,点击"提交"按钮后,会调用on_submit函数,输出用户输入的内容。

我们需要注意的是,文本输入框与文本框是有区别的,文本框可以输入多行文字,是带滑动条的。

六、下拉框comboBox

在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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这个例子中,我们创建了一个包含一个下拉框的简单窗口。用户可以从下拉列表中选择一个选项,当选项改变时,会调用on_submit函数,输出用户选择的值。
文章随时可能更新,请关注文章原出处: https://blog.csdn.net/haigear/article/details/137281370
这篇介绍先到这里为止,我们后面继续!
tkinter控件教程使用说明(二)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号