geekdoc-python-zh/docs/askpython/coin-flip-gui.md

6.0 KiB
Raw Permalink Blame History

使用 Python Tkinter 的硬币翻转 GUI

原文:https://www.askpython.com/python-modules/tkinter/coin-flip-gui

在本教程中,我们将使用 Python Tkinter 编写一个具有图形用户界面(GUI)的硬币投掷程序。本教程旨在向您传授 Tkinter 模块的基础知识,这是一个用 Python 开发基于 GUI 的程序的优秀模块。

也读: Tkinter 教程——使用 Tkinter 按键

用 Python Tkinter 实现硬币翻转 GUI 应用程序

Tkinter 是 python 的标准 GUI 库用于开发基于界面的应用程序。Tkinter 与 Python 结合使用,使得基于 GUI 的应用程序变得非常容易。

1.安装模块

对于这个程序,我们需要 Python NumPyPillow 和 Tkinter 库,我们可以使用 pip 轻松下载这些库。

pip install numpy
pip install pillow
pip install tk

2.导入模块

安装模块后,我们可以通过导入程序中的所有模块来开始编写程序。

import numpy as np
from tkinter import *
from PIL import Image, ImageTk

注意:-在上面的代码中,' * '意味着我们从模块 Tkinter 导入所有内容。

3.为我们的应用程序创建主窗口

首先,我们将使用 Tk()对象初始化 Tkinter 类并将其赋给“root”变量。所以现在通过使用 root我们可以访问 Tkinter 模块的所有方法。

在第二行代码中,我们指定了输出 GUI 屏幕的窗口大小,就像这里我们给了它 400*400 的值(对于 widthxheight)。

现在我们使用 mainloop 方法使窗口持久化意味着窗口不会关闭,除非我们自己想关闭它。如果我们跳过这一行代码,输出屏幕会出现一次并立即关闭。

root = Tk()
root.geometry("500*500")
root.mainloop()

运行上述代码后,我们将得到如下所示的窗口。如果你有一个这样的窗口,你就很好,可以继续下去。

Output GUI Screen Tkinter

Output GUI Screen Tkinter

4.加载图像

我们将根据我们程序的结果显示一个硬币的图像。如果输出是正面,那么它将显示硬币的正面,当它是反面时,显示硬币的反面。

正面和反面两个图像都保存在与我们的程序文件相同的目录中。如果没有,那么您需要传递图像文件名及其位置。

#load heads image
load = Image.open("heads.jpg")
heads = ImageTk.PhotoImage(load)

#load tails image
load = Image.open("tails.jpg")
tails = ImageTk.PhotoImage(load)

为了您的方便,我们已经将图像文件添加到硬币的正面和背面。

5.添加按钮

现在我们的主窗口已经准备好了,我们需要一个按钮,我们可以按下这个按钮来投掷硬币。

按下这个按钮,我们就调用了一个 tossTheCoin 函数。我们可以使用 tkinter 中的按钮类来创建按钮。

b1=Button(root, text="Toss the Coin", font=("Arial", 10), command=tossTheCoin, bg='teal', fg='white', activebackground="lightblue", padx=10, pady=10)
b1.pack()

上面的代码将在我们的主窗口中呈现一个按钮,文本为 **Toss the Coin。命令中,**我们将传递我们的函数名。

注意:我们使用 pack() 方法在我们的主窗口上渲染每一个元素。

6.结果的文本字段

现在,我们以文本格式为掷硬币的结果创建一个文本字段。为此,我们使用代码:

tfield = Text(root, width=52, height=5)
tfield.pack()

要在该文本字段中插入文本,我们使用 insert 函数,如下所示:

tfield.insert(INSERT, "Click on the Button.. To Flip the Coin and get the result")

现在,每次结果发生变化时,我们都需要删除之前插入的文本,所以我们将 delete text 方法与按钮 click

tfield.delete("1.0", "end")

7.实现 tossTheCoin()函数

当我们扔硬币时,它有 50%的机会正面或反面落地。我们希望在我们的程序中有这种公平的性质,这样它就可以接近真实的抛硬币场景。为此,我们将使用 NumPy 模块的二项式方法。

np.random.binomial(1,0.5)

这将返回 1 或 0。因此我们可以编写 if 条件语句来检查它是 1 还是 0并使用 config 方法相应地呈现头部或尾部图像。

完整的代码看起来像这样-

import numpy as np
from tkinter import *
from PIL import Image, ImageTk

def coinFlip():
    result = np.random.binomial(1,0.5)
    tfield.delete("1.0", "end")

    if(result == 1):
        tfield.insert(INSERT, " It's ————> HEADS")
        i.config(image = heads)

    else:
        tfield.insert(INSERT, " It's ————> TAILS")
        i.config(image = tails)

root = Tk()
root.title("Python Coin Flip")

#load heads image
load = Image.open("head.png")
heads = ImageTk.PhotoImage(load)

#load tails image
load = Image.open("tail.png")
tails = ImageTk.PhotoImage(load)

i = Label(root, image=heads)
i.pack()

root.geometry("500x500")
b1 = Button(root, text="Toss the Coin", font=("Arial", 10), command=coinFlip, bg='teal', fg='white', activebackground="lightblue", padx=10, pady=10)
b1.pack()

#Text Field for Result
tfield = Text(root, width=52, height=5)
tfield.pack()
tfield.insert(INSERT, "Click on the Button.. To Flip the Coin and get the result")

root.mainloop()

程序的最终输出:-

Output For Heads 1

Output For Heads 1

Output For Tails 1

Output For Tails 1

The output of our code on button click for Coin Flip

结论

就是这样!对于教程。希望你已经学得很好,并使用 Python Tkinter 轻松地编写了一个基于 GUI 的代码。