Skip to content

Tkinter常用控件

在使用Tkinter开发GUI应用程序时,需要了解和使用各种控件(也称为组件或小部件)。

常用的Tkinter控件包括:按钮(Button)、标签(Label)、文本框(Entry)、列表框(Listbox)、复选框(Checkbutton)、单选按钮(Radiobutton)、消息提醒框(Messagebox)、菜单栏控件(Menu)等。

按钮(Button)

按钮是最常用的控件之一,用于触发事件。

代码如下

python
from tkinter import *

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def on_button_click():
    print("Button clicked!")

# 创建一个按钮并添加到主窗口
btn = Button(root, 
             text='Click Me',              # 设置按钮文本
             font=('Arial', 16),            # 设置字体和字号
             bg='yellow',                   # 设置背景色
             fg='blue',                     # 设置前景色(文本颜色)
             padx=10,                       # 设置x方向内边距
             pady=10,                       # 设置y方向内边距
             relief='solid',                # 设置边框样式
             bd=2,                          # 设置边框宽度
             command=on_button_click)       # 设置单击事件处理函数
btn.pack()

root.mainloop()

标签(Label)

标签用于显示文本或图像。Label控件可以使用多种参数来设置标签的外观和行为。

代码如下

python
from tkinter import *

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def on_button_click():
    print(label['text'])

# 创建一个标签并添加到主窗口
label = Label(root,
              text='Hello, Tkinter!',       # 设置标签文本
              font=('Arial', 16),           # 设置字体和字号
              bg='yellow',                  # 设置背景色
              fg='blue',                    # 设置前景色(文本颜色)
              padx=10,                      # 设置x方向内边距
              pady=10,                      # 设置y方向内边距
              relief='solid',               # 设置边框样式
              bd=2,                         # 设置边框宽度
              justify='center')             # 设置文本对齐方式
label.pack()



# 创建一个按钮并添加到主窗口
btn = Button(root,
             text='Get Label Text',         # 设置按钮文本
             command=on_button_click)       # 设置单击事件处理函数
btn.pack()

# 创建一个显示为图片的标签
photo = PhotoImage(file=r'C:\Users\Administrator\Pictures\130406-20220530084101925-1730394191.png') # 注意,这里只能添加png/gif格式的图片,jpeg的图片需要用Pillow库来加载
lable_image = Label(root, text='图片', image=photo, compound='top', relief=RIDGE)
lable_image.pack()


root.mainloop()

参数说明

text: 设置标签显示的文本内容。

font: 设置字体和字号,例如 ('Arial', 16) 表示使用 Arial 字体,字号为 16。

bg: 设置标签的背景色。

fg: 设置标签的前景色(文本颜色)。

padxpady: 分别设置标签的x方向和y方向的内边距。

relief: 设置标签的边框样式,可以是 flat(默认)、raised、sunken、groove 或 ridge。

bd: 设置标签的边框宽度。

justify: 设置多行文本的对齐方式,可以是 left、center 或 right。

文本框(Entry)

文本框用于单行文本输入。Entry控件不能使用与 Label 相同的样式属性,如 font、bg、fg 等,但可以使用一些特定于文本框的属性。

代码如下

python
from tkinter import *

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def on_button_click():
    print(entry.get())

# 创建一个文本框并添加到主窗口
entry = Entry(root, 
              show='*',                    # 设置输入内容为星号,适用于密码输入
              width=30,                    # 设置文本框宽度,是指字符的个数,而不是像素
              justify='center',            # 设置文本对齐方式
              bd=2,                        # 设置边框宽度
              relief='solid')              # 设置边框样式
entry.pack()

# 创建一个按钮并添加到主窗口
btn = Button(root, 
             text='Get Entry Text',        # 设置按钮文本
             command=on_button_click)      # 设置单击事件处理函数
btn.pack()

root.mainloop()

单选按钮(Radiobutton)

单选按钮用于单项选择。Radiobutton控件可以使用与 Label 相同的样式属性,如 font、bg、fg 等。

python

from tkinter import *

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def on_button_click():
    print(var.get())

# 创建一个变量来存储单选按钮的值
var = IntVar()

# 创建多个单选按钮并添加到主窗口
rb1 = Radiobutton(root, 
                  text='Option 1',          # 设置单选按钮文本
                  variable=var,             # 设置单选按钮变量
                  value=1,                  # 设置单选按钮值
                  font=('Arial', 14),       # 设置字体和字号
                  bg='lightgrey',           # 设置背景色
                  fg='black',               # 设置前景色(文本颜色)
                  padx=5,                   # 设置x方向内边距
                  pady=5,                   # 设置y方向内边距
                  relief='solid',           # 设置边框样式
                  bd=1)                     # 设置边框宽度
rb1.pack()

rb2 = Radiobutton(root, 
                  text='Option 2', 
                  variable=var, 
                  value=2,
                  font=('Arial', 14), 
                  bg='lightgrey', 
                  fg='black', 
                  padx=5, 
                  pady=5, 
                  relief='solid', 
                  bd=1)
rb2.pack()

# 创建一个按钮并添加到主窗口
btn = Button(root, 
             text='Get Selected Option',   # 设置按钮文本
             command=on_button_click)      # 设置单击事件处理函数
btn.pack()

root.mainloop()

复选框(Checkbutton)

复选框用于多项选择。Checkbutton控件可以使用与 Label 相同的样式属性,如 font、bg、fg 等。

代码如下

python
from tkinter import *

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def on_button_click():
    print(f'Checkbutton 1: {var1.get()}')
    print(f'Checkbutton 2: {var2.get()}')

# 创建变量来存储复选框的状态
var1 = IntVar()
var2 = IntVar()

# 创建复选框并添加到主窗口
chk1 = Checkbutton(root, 
                   text='Option 1',         # 设置复选框文本
                   variable=var1,           # 设置复选框变量
                   font=('Arial', 14),      # 设置字体和字号
                   bg='lightgrey',          # 设置背景色
                   fg='black',              # 设置前景色(文本颜色)
                   padx=5,                  # 设置x方向内边距
                   pady=5,                  # 设置y方向内边距
                   relief='solid',          # 设置边框样式
                   bd=1)                    # 设置边框宽度
chk1.pack()

chk2 = Checkbutton(root, 
                   text='Option 2', 
                   variable=var2, 
                   font=('Arial', 14), 
                   bg='lightgrey', 
                   fg='black', 
                   padx=5, 
                   pady=5, 
                   relief='solid', 
                   bd=1)
chk2.pack()

# 创建一个按钮并添加到主窗口
btn = Button(root, 
             text='Get Checkbutton States', # 设置按钮文本
             command=on_button_click)       # 设置单击事件处理函数
btn.pack()

root.mainloop()

列表框(Listbox)

列表框用于显示一个列表。Listbox控件可以使用一些与 Label 相同的样式属性,如 font、bg、fg 等。

代码如下

python

from tkinter import *

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def on_button_click():
    selected_items = listbox.curselection()
    for item in selected_items:
        print(listbox.get(item))

# 创建一个列表框并添加到主窗口
listbox = Listbox(root, 
                  font=('Arial', 12),       # 设置字体和字号
                  bg='white',               # 设置背景色
                  fg='black',               # 设置前景色(文本颜色)
                  relief='solid',           # 设置边框样式
                  bd=2)                     # 设置边框宽度
listbox.pack()
# 添加列表项
listbox.insert(END, 'Item 1')
listbox.insert(END, 'Item 2')

# 创建一个按钮并添加到主窗口
btn = Button(root, 
             text='Get Selected Items',    # 设置按钮文本
             command=on_button_click)      # 设置单击事件处理函数
btn.pack()

root.mainloop()

消息提醒框(Messagebox)

消息提醒框用于向用户显示信息或警告。可以使用 messagebox 模块中的各种函数来创建不同类型的消息框,如信息框、警告框、错误框等。

常用的消息框函数:

showinfo(title, message):显示信息消息框 showwarning(title, message):显示警告消息框 showerror(title, message):显示错误消息框 askquestion(title, message):显示询问消息框,返回 "yes" 或 "no" askokcancel(title, message):显示确定取消消息框,返回 True 或 False askyesno(title, message):显示是/否消息框,返回 True 或 False askretrycancel(title, message):显示重试取消消息框,返回 True 或 False

代码如下

python
from tkinter import *
from tkinter import messagebox # 尽管我们导入了 tkinter 模块,但 messagebox 是 tkinter 模块中的一个子模块,需要单独导入

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

def show_info():
    messagebox.showinfo("Information", "This is an info message")

def show_warning():
    messagebox.showwarning("Warning", "This is a warning message")

def show_error():
    messagebox.showerror("Error", "This is an error message")

def ask_question():
    response = messagebox.askquestion("Question", "Do you like Python?")
    print(response)  # 返回 'yes' 或 'no'

def ask_ok_cancel():
    response = messagebox.askokcancel("Ok Cancel", "Do you want to proceed?")
    print(response)  # 返回 True 或 False

def ask_yes_no():
    response = messagebox.askyesno("Yes No", "Do you agree?")
    print(response)  # 返回 True 或 False

def ask_retry_cancel():
    response = messagebox.askretrycancel("Retry Cancel", "Do you want to try again?")
    print(response)  # 返回 True 或 False

# 创建按钮并添加到主窗口
btn_info = Button(root, text='Show Info', command=show_info)
btn_info.pack(pady=5)

btn_warning = Button(root, text='Show Warning', command=show_warning)
btn_warning.pack(pady=5)

btn_error = Button(root, text='Show Error', command=show_error)
btn_error.pack(pady=5)

btn_question = Button(root, text='Ask Question', command=ask_question)
btn_question.pack(pady=5)

btn_ok_cancel = Button(root, text='Ask Ok Cancel', command=ask_ok_cancel)
btn_ok_cancel.pack(pady=5)

btn_yes_no = Button(root, text='Ask Yes No', command=ask_yes_no)
btn_yes_no.pack(pady=5)

btn_retry_cancel = Button(root, text='Ask Retry Cancel', command=ask_retry_cancel)
btn_retry_cancel.pack(pady=5)

root.mainloop()

好的,将菜单项文本调整为中文,下面是更新后的内容:


菜单栏控件(Menu)

菜单栏用于为用户提供可选的操作项,通常显示在应用程序的顶部。Tkinter 提供了 Menu 控件来创建菜单栏。

代码如下

Python
from tkinter import *
from tkinter import messagebox

def show_about():
    messagebox.showinfo("关于", "这是一个 Tkinter 应用程序。")

def open_file():
    messagebox.showinfo("打开", "点击了打开文件菜单项。")

def exit_application():
    root.quit()

# 创建顶层窗口对象
root = Tk()
root.geometry('500x300')
root.title('Tkinter 菜单示例')

# 创建菜单栏
menu_bar = Menu(root)
root.config(menu=menu_bar)

# 创建文件菜单
file_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label='文件', menu=file_menu)
file_menu.add_command(label='打开', command=open_file)
file_menu.add_separator()
file_menu.add_command(label='退出', command=exit_application)

# 创建帮助菜单
help_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label='帮助', menu=help_menu)
help_menu.add_command(label='关于', command=show_about)

# 显示主窗口
root.mainloop()

代码说明

  1. 创建菜单栏

    Python
    menu_bar = Menu(root)
    root.config(menu=menu_bar)

    这里创建了一个菜单栏,并将其设置为顶层窗口的菜单。

  2. 创建菜单项

    • 文件菜单:通过 Menu 控件创建,并添加到菜单栏中。使用 add_command 方法添加菜单项,例如“打开”和“退出”。
    • 帮助菜单:类似文件菜单,通过 Menu 控件创建,并添加到菜单栏中。包含一个“关于”菜单项。
  3. 菜单项操作

    • show_about:展示一个关于对话框,文本为中文“关于”。
    • open_file:展示一个打开文件的对话框(这里只是一个示例,实际打开文件功能可以通过 tkinter.filedialog 实现),文本为中文“打开”。
    • exit_application:退出应用程序,文本为中文“退出”。

菜单栏控件的功能

  • 菜单项:可以是命令(如打开文件、退出应用)、子菜单或分隔符。
  • 菜单配置:可以设置不同的标签和事件处理函数来实现菜单的功能。
  • 分隔符:可以通过 add_separator 方法添加菜单项之间的分隔线,以增强菜单的可读性。

Released under the MIT License