Python 3 – GUI编程 (Tkinter)

Python 3 – GUI编程 (Tkinter)

Python 作为一门优秀的编程语言,已经被广泛应用于机器学习、数据分析、Web 开发和自动化等领域。同时,Python 还拥有一个强大的 GUI 库——Tkinter,可以方便地创建各种图形界面。本文将介绍如何使用 Python 3 在 Tkinter 中创建 GUI 程序。

安装 Tkinter

Python 3 默认自带 Tkinter 模块,因此不需要额外安装。可以在命令行输入以下命令,查看自己的 Python 版本和是否安装了 Tkinter:

python -V

如果输出了类似 Python 3.x.x 的版本号,则说明 Python 3 已经安装。可以输入以下命令,导入 Tkinter 模块并查看其版本:

import tkinter
print(tkinter.TkVersion)

如果输出了版本号,则说明 Tkinter 已经安装。

Tkinter 基础

创建窗口

使用 Tkinter 创建窗口非常简单,只需完成以下步骤:

  1. 导入 Tkinter 模块;
  2. 创建主窗口对象;
  3. 进入主事件循环。

下面是一个示例程序:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 进入主事件循环
window.mainloop()

运行后,会看到一个空白的窗口,窗口的标题为 tk

设置窗口大小和位置

使用 geometry() 方法可以设置窗口的大小和位置。它的参数是字符串,格式为 宽度x高度+水平偏移量+垂直偏移量。例如,以下代码将窗口大小设置为 300×200,位置设置为 (100, 100):

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 设置窗口大小和位置
window.geometry('300x200+100+100')

# 进入主事件循环
window.mainloop()

设置窗口标题和图标

使用 title() 方法可以设置窗口的标题,例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('Hello, Tkinter')

# 进入主事件循环
window.mainloop()

其结果是窗口的标题变为 Hello, Tkinter

使用 iconbitmap() 方法可以设置窗口的图标,方法的参数为一个 ICO 文件的路径。例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 设置窗口图标
window.iconbitmap('icon.ico')

# 进入主事件循环
window.mainloop()

其中 icon.ico 是一个 ICO 文件的路径。

创建 Label

创建 Label 是 Tkinter 中常用的 GUI 元素之一,它可以显示文本或图片。使用 Label() 方法可以创建一个 Label,方法的参数为窗口对象和显示的文本。例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 创建 Label
label = tk.Label(window, text='Hello, Tkinter')

# 显示 Label
label.pack()

# 进入主事件循环
window.mainloop()

其中 pack() 方法用于显示 Label,它还可以指定 Label 的位置和对齐方式。

创建 Button

创建 Button 是 Tkinter 中常用的 GUI 元素之一,它可以响应用户的点击事件。使用 Button() 方法可以创建一个 Button,方法的参数为窗口对象、显示的文本和点击事件的回调函数。例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 点击事件的回调函数
def on_click():
    print('Button clicked.')

# 创建 Button
button = tk.Button(window, text='Click me', command=on_click)

# 显示 Button
button.pack()

# 进入主事件循环
window.mainloop()

其中 command 参数指定了点击事件的回调函数,它会在用户点击 Button 时被调用。

Tkinter 高级特性

创建菜单

使用 Menu() 方法可以创建一个菜单。在 Tkinter 中,菜单的种类有三种:顶层菜单、下拉菜单和上下文菜单。下面分别介绍如何创建这三种菜单。

顶层菜单

顶层菜单是作为窗口的一部分创建的,通常包含在窗口顶部的菜单栏中。使用 Menu() 方法创建顶层菜单,在创建窗口后立即创建菜单栏,然后在菜单栏中添加菜单项。例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 创建菜单栏
menubar = tk.Menu(window)

# 添加 File 菜单项
filemenu = tk.Menu(menubar, tearoff=False)
filemenu.add_command(label='Open')
filemenu.add_command(label='Save')
menubar.add_cascade(label='File', menu=filemenu)

# 添加 Help 菜单项
helpmenu = tk.Menu(menubar, tearoff=False)
helpmenu.add_command(label='About')
menubar.add_cascade(label='Help', menu=helpmenu)

# 显示菜单栏
window.config(menu=menubar)

# 进入主事件循环
window.mainloop()

其中 Menu() 方法创建了一个菜单,tearoff 参数为 False 表示不允许菜单项被拆分,add_command() 方法用于添加一个菜单项,add_cascade() 方法用于在菜单栏中添加一个菜单。

下拉菜单

下拉菜单是指在菜单栏或其他菜单项上单击时弹出的菜单。使用 Menu() 方法创建下拉菜单,在创建菜单时指定该菜单所属的菜单项,然后在该菜单中添加菜单项。例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 创建菜单栏
menubar = tk.Menu(window)

# 添加 File 菜单项及下拉菜单
filemenu = tk.Menu(menubar, tearoff=False)
filemenu.add_command(label='Open')
filemenu.add_command(label='Save')

submenu = tk.Menu(filemenu, tearoff=False)
submenu.add_command(label='Copy')
submenu.add_command(label='Paste')
filemenu.add_cascade(label='Edit', menu=submenu)

menubar.add_cascade(label='File', menu=filemenu)

# 显示菜单栏
window.config(menu=menubar)

# 进入主事件循环
window.mainloop()

其中 add_cascade() 方法用于在下拉菜单中添加另一个菜单,参数 label 为该菜单的名称,menu 为该菜单对象。

上下文菜单

上下文菜单是指在图形界面中右键单击某个对象时弹出的菜单。使用 Menu() 方法创建上下文菜单,在创建窗口时指定该窗口的上下文菜单,然后在该菜单中添加菜单项。例如:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 创建上下文菜单并添加菜单项
menu = tk.Menu(window, tearoff=False)
menu.add_command(label='Copy')
menu.add_command(label='Paste')

# 绑定右键单击事件
def on_right_click(event):
    menu.post(event.x_root, event.y_root)

window.bind('<Button-3>', on_right_click)

# 进入主事件循环
window.mainloop()

其中 <Button-3> 表示鼠标右键单击事件,on_right_click() 方法用于响应该事件并弹出菜单。

创建对话框

使用对话框可以方便地与用户交互,获取用户的输入或显示提示信息。在 Tkinter 中,可以使用 Toplevel() 方法创建对话框,也可以使用 tkinter.messagebox 模块中的方法创建各种类型的对话框。

创建 Toplevel 对话框

创建 Toplevel 对话框的方法与创建主窗口类似。以下是一个显示对话框的示例程序:

import tkinter as tk

# 创建主窗口对象
window = tk.Tk()

# 创建按钮
def on_click():
    # 创建对话框
    dialog = tk.Toplevel(window)
    dialog.geometry('200x100+200+200')
    dialog.title('Dialog')
    tk.Label(dialog, text='Hello, Tkinter!').pack()

button = tk.Button(window, text='Click me', command=on_click)
button.pack()

# 进入主事件循环
window.mainloop()

在该程序中,单击按钮会创建一个 Toplevel 对话框,其中包含一个 Label,显示文本为 Hello, Tkinter!

创建消息框

在 Tkinter 中,可以使用 tkinter.messagebox 模块中的方法创建各种类型的对话框。以下是一些示例:

import tkinter as tk
import tkinter.messagebox as msgbox

# 创建主窗口对象
window = tk.Tk()

# 创建按钮
def on_click():
    # 消息框(带 OK 按钮)
    msgbox.showinfo('Message', 'Hello, Tkinter!')

    # 询问框(带 Yes 和 No 按钮)
    result = msgbox.askyesno('Question', 'Do you like Tkinter?')
    if result:
        print('Yes')
    else:
        print('No')

    # 警告框(带 OK 按钮)
    msgbox.showwarning('Warning', 'This is a warning message.')

    # 错误框(带 OK 按钮)
    msgbox.showerror('Error', 'An error occurred.')

button = tk.Button(window, text='Click me', command=on_click)
button.pack()

# 进入主事件循环
window.mainloop()

在该程序中,单击按钮会依次显示消息框、询问框、警告框和错误框。

Tkinter Tips

美化程序

通过将图像和自定义字体添加到程序中,可以美化 Python Tkinter GUI 应用程序。以下代码演示如何用自定义字体和图像装饰标签控件:

import tkinter as tk
from PIL import Image, ImageTk

# 创建主窗口对象
window = tk.Tk()

# 添加自定义字体
font = ('Yu Gothic UI', 14)
title_font = ('Yu Gothic UI', 20, 'bold')

# 添加标签
tk.Label(window, text='Hello, Tkinter!', font=title_font).pack(pady=10)

# 添加图像
image = Image.open('image.png')
photo = ImageTk.PhotoImage(image)
tk.Label(window, image=photo).pack(pady=10)

# 进入主事件循环
window.mainloop()

在该程序中,添加自定义字体只需将字体名称传递给 fonttitle_font 参数。添加图像则需要使用 Pillow 库中的 ImageImageTk 两个模块,先使用 Image.open() 方法打开图像文件并创建 Image 对象,再使用 ImageTk.PhotoImage() 方法将 Image 对象转换为 PhotoImage 对象,然后将该对象传递给标签控件的 image 参数。

调用 Python 外部脚本

将函数外部代码定义为 Python 模块可以方便地从 Tkinter GUI 控件调用它们。以下代码演示如何调用 Python 外部脚本添加计算器控件:

import tkinter as tk
import calculator

# 创建主窗口对象
window = tk.Tk()

# 添加计算器控件
calc = calculator.Calculator(window)
calc.pack(pady=10)

# 进入主事件循环
window.mainloop()

在该程序中,calculator 模块定义了一个名为 Calculator 的控件,该控件可以实现基本的算术运算。要从 Tkinter GUI 控件调用 Calculator,只需导入 calculator 模块并创建该控件对象即可。

结论

Python Tkinter 是一个强大的 GUI 库,它可以方便地创建各种类型的图形用户界面。在创建 Tkinter 程序时,需要先创建主窗口对象,设置窗口的大小和位置,然后将各种 Tkinter 控件添加到窗口中。使用菜单和对话框可以方便地与用户交互,获取用户的输入或显示提示信息。使用自定义字体和图像可以美化程序,让它更加吸引人。在编写 Tkinter 程序时,最好将功能模块定义为 Python 模块,以便从 Tkinter 控件调用它们。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程