使用`tkinter'在Python中开始GUI编程

130 阅读3分钟

GUI编程是令人兴奋和有趣的!

Python 标准库中的tkinter 模块是一个 GUI 工具包,我们可以用它来在我们的程序中创建图形用户界面,可以在不同的操作系统中移植。

有一些第三方库可以让你创建GUI界面,但tkinter 是与Python集成的一个,所以它是我们要解释的一个。

让我们从一个简单的打印标签的应用程序开始玩吧

import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()

从终端运行该程序。

你会很快看到一个窗口显示出来。这是它在macOS上的样子。

根据你的操作系统,你会看到不同的情况。

你可以调整窗口的大小,隐藏它,也可以让它全屏。

当窗口打开时,你从终端开始的Python进程仍然是活动的。按红色 (x) 按钮关闭窗口,你会看到终端程序存在。

与大多数 CLI (命令行界面) 应用程序相反,GUI 应用程序总是在等待用户事件,如鼠标或键盘事件,它们只在明确关闭时退出。

现在你看到了魔法的发生,让我们来谈谈这个程序。它只有5行代码,却为我们打开了GUI的世界。

import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()

我们导入tkinter 模块,为了方便起见,我们把它重命名为tk

然后我们用tk.Tk() 来初始化一个顶层的窗口。

我们用tk.Label() widget构造函数初始化一个标签,将root 顶层widget作为第一个参数,并添加一些其他信息,如要显示的文本和一些填充。

然后我们把标签打包(我们把它加到它的父部件上),然后我们调用root.mainloop() ,启动tkinter事件循环,它将管理应用程序的生命周期。

如果你愿意,你也可以单独从tkinter ,这样你就不必每次都用前缀来导入每个项目。

from tkinter import Tk, Label

root = Tk()
label = Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()

我提到了widget。标签是一个部件,但我们有很多这样的部件。其他我们会经常使用的有:Text,Entry,Button,StringVar,Canvas,Frame,PhotoImage,Scrollbar,Menu, 以及更多!

让我们建立一个简单的程序。该程序启动后生成一个随机数。我们将放置一个输入框,用户可以在其中输入一个数字,按下一个按钮,我们将检查它是否是中奖号码!

我们将使用Label,EntryButton 小工具来创建这个用户界面。

Guess! 按钮被按下时,我们调用一个guess() 函数,以获得输入框的值,并检查它是否等于我们用random.randint() 产生的随机数字。

如果数字是正确的,我们就会显示一条信息,内容是 messagebox,然后我们就退出这个程序。

下面是完整的程序。

from tkinter import Tk, Label, Entry, Button, messagebox

import random
n = random.randint(1,10)
print(n)

root = Tk()
label = Label(root, text="Guess a number between 1 and 10!", padx=10, pady=10)
label.pack()

ent = Entry(root)
ent.pack()

def guess():
    try:
        num = int(ent.get())
    except ValueError:
        print('Invalid value. Please enter a number')
    else:
        if num == n:
            print('WON!')
            messagebox.showinfo(title='You won!', message='You guessed the number!')
            root.destroy()

        else:
            print('Wrong number ' + str(num))
            messagebox.showerror(title='Wrong!', message='Try again!')


widget = Button(root, text='Guess!', command=guess)
widget.pack()
root.mainloop()

这些只是tkinter 的基础知识。要了解的东西还有很多,但我希望这能让你开始学习GUI编程。