《垃圾邮件识别器》(二)Tkinter

项目的第一步就是编写需要的界面,我们使用 Python 标准的 GUI 库 Tkinter 来实现。这一节就快速学习该库中将会用到的控件,为搭建图形界面做准备。

  1. 主窗口
  2. 主菜单
  3. 文本控件
  4. 其他控件

1. 主窗口

tk.TkTkinter 中的主窗口类,它是创建图形用户界面(GUI)应用程序的起点。Tk 表示 “ToolKit”,是一个跨平台的图形用户界面工具包,用于创建窗口、按钮、文本框、标签等 GUI 元素,并为它们添加事件处理、布局管理等功能。

import tkinter as tk


# 主窗口
def test():

    # 实例化窗口对象
    window = tk.Tk()

    # 参数为 str 类型,格式为: '宽x高+X坐标+Y坐标'
    window.geometry('500x300+200+200')
    # 设置窗口标题
    window.title('主窗口')
    # 设置固定大小,width=None, height=None
    window.resizable(False, False)

    # 窗口主循环
    window.mainloop()


if __name__ == '__main__':
    test()

2. 菜单控件

tk.Menu 是 Tkinter 中用于创建菜单的类,它允许你在图形用户界面(GUI)应用程序中添加菜单栏和菜单项,以提供用户导航和选择功能。菜单可以包含各种命令、选项和子菜单,用于组织和执行不同的操作。菜单控件要了解的内容包括:

  1. 普通菜单
  2. 多级菜单
  3. 单选菜单
  4. 多选菜单
  5. 分割线
import tkinter as tk


# 主窗口
def test():

    window = tk.Tk()
    window.geometry('500x300+200+200')

    # 初始化主菜单控件
    main_menu = tk.Menu()

    # 1. 添加普通菜单
    main_menu.add_command(label='文件', command=lambda : print('文件菜单点击'))
    main_menu.add_command(label='编辑', command=lambda : print('编辑菜单点击'))

    # 2. 添加多级菜单
    cascade_menu = tk.Menu(tearoff=False)  # tearoff 从主窗口剥离
    cascade_menu.add_command(label='子菜单1', command=lambda : print('子菜单1'))
    cascade_menu.add_command(label='子菜单2', command=lambda : print('子菜单2'))
    cascade_menu.add_command(label='子菜单3', command=lambda : print('子菜单3'))
    main_menu.add_cascade(label='多级菜单', menu=cascade_menu)

    # 3. 添加单选菜单
    radio_menu = tk.Menu(tearoff=False)
    radio_value = tk.StringVar()

    def on_radio_button_click():
        print('选中的值:', radio_value.get())

    radio_menu.add_radiobutton(label='中国', variable=radio_value, value='中国', command=on_radio_button_click)
    radio_menu.add_radiobutton(label='美国', variable=radio_value, value='美国', command=on_radio_button_click)
    radio_menu.add_radiobutton(label='德国', variable=radio_value, value='德国', command=on_radio_button_click)
    main_menu.add_cascade(label='单选菜单', menu=radio_menu)

    # 4. 添加多选菜单
    checkbox_menu = tk.Menu(tearoff=False)

    state1 = tk.BooleanVar(value=False)
    state2 = tk.BooleanVar(value=False)
    state3 = tk.BooleanVar(value=False)

    def on_checkbox_button_click():

        if state1.get():
            print('足球选中')

        if state2.get():
            print('篮球选中')

        if state3.get():
            print('冰球选中')

        print('-' * 10)

    checkbox_menu.add_checkbutton(label='足球', variable=state1, command=on_checkbox_button_click)
    checkbox_menu.add_checkbutton(label='篮球', variable=state2, command=on_checkbox_button_click)
    checkbox_menu.add_checkbutton(label='冰球', variable=state3, command=on_checkbox_button_click)
    main_menu.add_cascade(label='多选菜单', menu=checkbox_menu)

    # 5. 添加分割线
    seperator = tk.Menu(tearoff=False)
    seperator.add_command(label='子菜单1')
    seperator.add_command(label='子菜单2')
    seperator.add_separator()
    seperator.add_command(label='子菜单3')
    main_menu.add_cascade(label='菜单分割线', menu=seperator)

    # 将菜单设置到主窗口上
    window.config(menu=main_menu)

    window.mainloop()


if __name__ == '__main__':
    test()

3. 文本控件

文本控件需要了解的内容如下:

  1. 无滚动条 Text 控件
  2. 带滚动条 ScrolledText 控件
  3. 用于组合分割效果的 PanedWindow 控件
import tkinter as tk
from tkinter.scrolledtext import ScrolledText


# 1. Text
def test01():

    window = tk.Tk()
    window.geometry('500x300+200+200')

    text_area = tk.Text()
    # 1. 跟随父控件伸缩 TOP、BOTTOM、LEFT、RIGHT
    # text_area.pack(side=tk.RIGHT)
    # 2. 跟随父控件伸缩 X、Y、BOTH
    text_area.pack(fill=tk.BOTH, expand=True)
    # 3. 设置其他属性
    # wrap: 是否自动换行 NONE、WORD
    # bg: 背景颜色,例如:red
    # fg: 前景颜色,例如: white
    # font: 字体样式 (字体, 大小, 样式) 样式: normal bold italic underline overstrike
    # state: 控件的状态 NORMAL、DISABLED
    text_area.config(bg='red', fg='white', font=('楷体', 20, 'underline'))

    # 4. 添加内容
    # 4.1 尾部添加内容
    text_area.insert(tk.END, '我是中国人\n')
    text_area.insert(tk.END, '我是中国人\n')
    text_area.insert(tk.END, '我是中国人\n')

    # 4.2 指定位置添加内容
    # 在光标位置插入,# '2.0' 表示第 2 行的第 0 个字符位置
    text_area.mark_set('insert', '2.0')
    text_area.insert(tk.INSERT, '《接着插入》')

    text_area.insert('2.0', '新的一行内容\n')

    # 4.3 预定义字体颜色
    text_area.tag_configure("font1", font=("宋体", 10, 'overstrike'),  foreground="yellow")
    text_area.tag_configure("font2", font=("楷体", 12, 'underline'),   foreground="black")
    text_area.insert(tk.END, '根据字体插入文本\n', 'font1')
    text_area.insert(tk.END, '根据字体插入文本\n', 'font2')

    # 5. 获得文本框内容
    # 参数为开始位置 结束位置
    my_text = text_area.get('1.0', tk.END)
    print('文本框内容:\n', my_text)


    window.mainloop()


# 2. ScrolledText
def test02():
    window = tk.Tk()
    window.geometry('500x300+200+200')

    text_area = ScrolledText()
    text_area.pack(fill=tk.BOTH, expand=True)

    window.mainloop()


# 3. PanedWindow
def test03():
    window = tk.Tk()
    window.geometry('500x300+200+200')
    # window.resizable(False, False)

    # orient: VERTICAL、HORIZONTAL
    paned = tk.PanedWindow(orient=tk.HORIZONTAL)
    paned.pack(fill=tk.BOTH, expand=True)

    text1 = tk.Text()
    text2 = ScrolledText()

    # 添加 text1 控件,并设置 text1 控件宽度
    paned.add(text1, width=250)
    paned.add(text2)


    window.mainloop()

if __name__ == '__main__':
    test03()

4. 其他控件

TKinter 中还提供了很多其他的控件,例如:标签控件、按钮控件等等

import tkinter as tk


# 1. 标签控件
def test01():
    window = tk.Tk()
    window.geometry('500x300+200+200')

    # 创建标签对象
    label = tk.Label(master=window, text='准备就绪', bg='#bdc3c7')
    label.pack(side=tk.BOTTOM)
    # 修改标签文字
    label['text'] = 'Hello World'

    window.mainloop()


# 2. 按钮控件
def test02():
    window = tk.Tk()
    window.geometry('500x300+200+200')

    # 创建按钮对象
    button = tk.Button(text='按钮', command=lambda : print('按钮点击了'))
    button.pack(side=tk.BOTTOM)

    window.mainloop()


# 3. 容器控件
def test03():
    window = tk.Tk()
    window.geometry('500x300+200+200')

    # 创建一个容器控件
    frame = tk.Frame(window, width=300, height=200)
    frame.configure(borderwidth=0, bg='#bdc3c7')
    # 在 Frame 中创建两个子控件
    button1 = tk.Button(frame, text='按钮1', command=lambda : print('按钮点击了'))
    button1.place(x=10, y=10)
    button2 = tk.Button(frame, text='按钮2', command=lambda: print('按钮点击了'))
    button2.place(x=100, y=100)

    frame.pack(side=tk.BOTTOM)


    window.mainloop()


if __name__ == '__main__':
    test03()
未经允许不得转载:一亩三分地 » 《垃圾邮件识别器》(二)Tkinter
评论 (0)

3 + 8 =