📜  Python|使用 Tkinter 的简单火焰游戏

📅  最后修改于: 2022-05-13 01:54:21.218000             🧑  作者: Mango

Python|使用 Tkinter 的简单火焰游戏

先决条件:

  • Tkinter 简介
  • 实现简单火焰游戏的程序

Python为开发 GUI(图形用户界面)提供了多种选择。在所有的 GUI 方法中,Tkinter 是最常用的方法。它是Python随附的 Tk GUI 工具包的标准Python接口。带有 Tkinter 的Python输出创建 GUI 应用程序的最快和最简单的方法。现在,这取决于开发人员的想象力或必要性,他/她想使用这个工具包开发什么。
创建一个 Tkinter :

  • 导入模块 – Tkinter
  • 创建主窗口(容器)
  • 将任意数量的小部件添加到主窗口。
  • 在小部件上应用事件触发器

GUI 如下所示:

让我们创建一个简单的火焰游戏的 GUI 版本。火焰是一个流行的游戏,以首字母缩写命名:朋友,恋人,深情,婚姻,敌人,兄弟姐妹。该游戏无法准确预测某个人是否适合您,但与您的朋友一起玩会很有趣。

下面是实现:

Python3
# import all functions from the tkinter
from tkinter import *
 
# function for removing common characters
# with their respective occurrences
def remove_match_char(list1, list2):
 
    for i in range(len(list1)) :
        for j in range(len(list2)) :
 
            # if common character is found
            # then remove that character
            # and return list of concatenated
            # list with True Flag
            if list1[i] == list2[j] :
                c = list1[i]
 
                # remove character from the list
                list1.remove(c)
                list2.remove(c)
 
                # concatenation of two list elements with *
                # * is act as border mark here
                list3 = list1 + ["*"] + list2
 
                # return the concatenated list with True flag
                return [list3, True]
 
    # no common characters is found
    # return the concatenated list with False flag
    list3 = list1 + ["*"] + list2
    return [list3, False]
 
 
# function for telling the relationship status
def tell_status() :
     
    # take a 1st player name from Player1_field entry box 
    p1 = Player1_field.get()
 
    # converted all letters into lower case
    p1 = p1.lower()
 
    # replace any space with empty string
    p1.replace(" ", "")
 
    # make a list of letters or characters
    p1_list = list(p1)
 
    # take a 2nd player name from Player2_field entry box
    p2 = Player2_field.get()
    p2 = p2.lower()
    p2.replace(" ", "")
    p2_list = list(p2)
 
    # taking a flag as True initially
    proceed = True
     
    # keep calling remove_match_char function
    # until common characters is found or
    # keep looping until proceed flag is True
    while proceed :
 
        # function calling and store return value
        ret_list = remove_match_char(p1_list, p2_list)
 
        # take out concatenated list from return list
        con_list = ret_list[0]
 
        # take out flag value from return list
        proceed = ret_list[1]
 
        # find the index of "*" / border mark
        star_index = con_list.index("*")
 
        # list slicing perform
         
        # all characters before * store in p1_list
        p1_list = con_list[ : star_index]
 
        # all characters after * store in p2_list
        p2_list = con_list[star_index + 1 : ]
 
 
    # count total remaining characters
    count = len(p1_list) + len(p2_list)
 
    # list of FLAMES acronym
    result = ["Friends", "Love", "Affection", "Marriage", "Enemy", "Siblings"]
 
    # keep looping until only one item
    # is not remaining in the result list
    while len(result) > 1 :
 
        # store that index value from
        # where we have to perform slicing.
        split_index = (count % len(result) - 1)
 
        # this steps is done for performing
        # anticlock-wise circular fashion counting.
        if split_index >= 0 :
 
            # list slicing
            right = result[split_index + 1 : ]
            left = result[ : split_index]
 
            # list concatenation
            result = right + left
 
        else :
            result = result[ : len(result) - 1]
 
    # insert method inserting the 
        # value in the text entry box.
    Status_field.insert(10, result[0])
 
 
# Function for clearing the 
# contents of all text entry boxes  
def clear_all() : 
    Player1_field.delete(0, END)  
    Player2_field.delete(0, END)
    Status_field.delete(0, END)
   
    # set focus on the Player1_field entry box 
    Player1_field.focus_set() 
 
 
# Driver code
if __name__ == "__main__" :
   
    # Create a GUI window
    root = Tk()
   
    # Set the background colour of GUI window
    root.configure(background = 'light green')
   
    # Set the configuration of GUI window
    root.geometry("350x125")
   
    # set the name of tkinter GUI window
    root.title("Flames Game") 
       
    # Create a Player 1 Name: label
    label1 = Label(root, text = "Player 1 Name: ",
                   fg = 'black', bg = 'dark green')
   
    # Create a Player 2 Name: label
    label2 = Label(root, text = "Player 2 Name: ",
                   fg = 'black', bg = 'dark green')
       
    # Create a Relation Status: label
    label3 = Label(root, text = "Relationship Status: ",
                   fg = 'black', bg = 'red')
 
    # grid method is used for placing 
    # the widgets at respective positions 
    # in table like structure .
    label1.grid(row = 1, column = 0, sticky ="E") 
    label2.grid(row = 2, column = 0, sticky ="E") 
    label3.grid(row = 4, column = 0, sticky ="E")
 
    # Create a text entry box 
    # for filling or typing the information.
    Player1_field = Entry(root) 
    Player2_field = Entry(root) 
    Status_field = Entry(root)
 
    # grid method is used for placing 
    # the widgets at respective positions 
    # in table like structure . 
    # ipadx keyword argument set width of entry space . 
    Player1_field.grid(row = 1, column = 1, ipadx ="50") 
    Player2_field.grid(row = 2, column = 1, ipadx ="50") 
    Status_field.grid(row = 4, column = 1, ipadx ="50") 
 
    # Create a Submit Button and attached 
    # to tell_status function 
    button1 = Button(root, text = "Submit", bg = "red", 
                     fg = "black", command = tell_status)
   
    # Create a Clear Button and attached 
    # to clear_all function 
    button2 = Button(root, text = "Clear", bg = "red", 
                     fg = "black", command = clear_all)
 
    # grid method is used for placing 
    # the widgets at respective positions 
    # in table like structure . 
    button1.grid(row = 3, column = 1)
    button2.grid(row = 5, column = 1)
 
    # Start the GUI 
    root.mainloop()


输出 :