本文假定你是有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

按钮上显示的文本

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!",并设置了字体、背景颜色以及内边填充。

四、文本输入框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()

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

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

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

五、文本框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()

在这个例子中,我们创建了一个包含一个文本框和一个按钮的简单窗口。用户可以在文本框中输入多行文本,点击"提交"按钮后,会调用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()

在这个例子中,我们创建了一个包含一个下拉框的简单窗口。用户可以从下拉列表中选择一个选项,当选项改变时,会调用on_submit函数,输出用户选择的值。