单击按钮时如何弹出不同的名称?

时间:2021-05-10 23:23:51

标签: python tkinter

我是 Python 的新手,这是我的第一个“大”项目。这就是我今天所做的工作。我正在尝试处理这个项目,当您单击类别并按下生成按钮时,该项目会随机生成一个名称。它随机生成一个名称,但是当我再次按下生成按钮时,它不会显示另一个名称。这就是我想弄清楚的。另外,如果有人不介意,我如何选中一个框并在该类别上生成一个名称。

非常感谢

import tkinter as tk
from tkinter import Label, StringVar, filedialog, Text
import os
import random
from tkinter import font

randomfirst = ("Hunter", "Rage", "Ash", "Money", "Ace", "Charles", "Ajax", "Rocket", "Harden",
"Blaze", "Rich", "Ghost", "Joker", "Queen", "Azure", "Zeus", "Apollo", "Hephaistos", "Aqua",
"Rain", "Apex", "Flame", "Cronos", "Kim", "Adras", "Achilles", "Alena", "Hades",
"Ares", "Athena", "Alistair", "Alyx")
Random1 = random.choice(randomfirst)

randomlast = ("Parker", "Nereus", "Reaper", "Bacchus", "Aino", "Tara", "Eris", "Iuno", "Devaraja", "Hector"
"Aditi", "Mabon", "Astraia", "Deimos", "Demeos", "Demon", "Lucifer", "Angel", "Kerberos", "Cerberus", "Zinon",
"Lycus", "Lamia", "Thanatos", "Leucippus", "Thaleia")
Random2 = random.choice(randomlast)

Medievalname = ("Zemislav", "Wolf", "Titian", "Teague", "Savage", "Salvador", "Rogue", "Richard", "Radax", "Pascal",
"Osmund", "Novel", "Milo", "Maurin", "Lucan", "Justus", "Jerome", "Hawk",
"Gregory", "Finnian", "Emil", "Drew", "Crispin", "Bjorn", "Alan")
Medieval = random.choice(Medievalname)

GreekMythname= ("Acestes", "Achilles", "Acis", "Acontius", "Actaeon",
"Admetus", "Adonis", "Aecus", "Aedon", "Aeolus", "Baucis",
"Bellerophon", "Bendis", "Biton", "Boreas", "Briareus", "Busiris",
"Britomaris", "Caberiri")
GreekMyth = random.choice(GreekMythname)

Japanesename = ("Fuji", "Homura", "Kaito", "Mizu", "Shimizu", "Asahi",
"Sora", "Riku", "Fujin", "Izanagi", "Kuebiko", "Raiden", "Raijin",
"Ryujin", "Kojin", "Suijin", "Tenjin", "Tsukiyomi", "Takemikazuchi",
"Aoki", "Endo", "Inoue", "Ito")
Japanese = random.choice(Japanesename)



root = tk.Tk()

def onClick():
    labelRandomname = tk.Label(framedisplay, text=(GreekMyth), font= ("Broadway", 36), bg="#d3d3d3")
    labelRandomname.
    labelRandomname.pack()
    labelRandomname.place(relx= 0.35, rely= 0.35)



i= StringVar()

canvas = tk.Canvas(root, height=800, width= 800, bg="#17517e")
canvas.pack()

frame = tk.Frame(root, bg= "white")
frame.place(relwidth=0.97, relheight=0.97, relx= 0.015, rely= 0.015)

framedisplay = tk.Frame(root, bg= "#d3d3d3")
framedisplay.place(relwidth= 0.75, relheight= 0.35, relx= 0.125, rely= 0.575)

labelwelcome = tk.Label(frame, text=" Random Name Generator! ", width= 25, height= 1,
                        font= ("Berlin Sans FB", 24), fg= "red", bg= "white")
labelwelcome.pack()

labelYourname = tk.Label(framedisplay, text= "Your name is: ", font= ("Berlin Sans FB", 20), bg= "#d3d3d3")
labelYourname.pack()

labelCategory = tk.Label(frame, text= "Select your name category",
                        font= ("Arial", 14))
labelCategory.pack()
labelCategory.place(relx= 0.350, rely= 0.105)

medievalCheck = tk.Checkbutton(frame, text= "Medieval", font=("Comic Sans MS", 12), variable= i, onvalue="checked", offvalue="unchecked")
medievalCheck.deselect()
medievalCheck.pack()
medievalCheck.place(relx= 0.20, rely= 0.160)

greekmythCheck = tk.Checkbutton(frame, text= "Greek Mythology", font=("Comic Sans MS", 12), variable= i, onvalue="checked", offvalue="unchecked")
greekmythCheck.deselect()
greekmythCheck.pack()
greekmythCheck.place(relx= 0.40, rely= 0.160)

japaneseCheck = tk.Checkbutton(frame, text= "Japanese", font=("Comic Sans MS", 12), variable= i, onvalue="checked", offvalue="unchecked")
japaneseCheck.deselect()
japaneseCheck.pack()
japaneseCheck.place(relx= 0.67, rely= 0.160)

romanCheck = tk.Checkbutton(frame, text= "Roman", font= ("Comic Sans MS", 12), variable= i, onvalue="checked", offvalue="unchecked")
romanCheck.deselect()
romanCheck.pack()
romanCheck.place(relx= 0.20, rely= 0.25)

fantasyCheck = tk.Checkbutton(frame, text="Fantasy", font=("Comic Sans MS", 12), variable= i, onvalue="checked", offvalue="unchecked")
fantasyCheck.deselect()
fantasyCheck.pack()
fantasyCheck.place(relx= 0.40, rely= 0.25)

russianCheck = tk.Checkbutton(frame, text="Russian", font=("Comic Sans MS", 12), variable= i, onvalue="checked", offvalue="unchecked")
russianCheck.deselect()
russianCheck.pack()
russianCheck.place(relx= 0.67, rely= 0.25)


generateButton = tk.Button(frame, text= "Generate!", padx=40, pady= 25, fg= "grey", bg= "black", foreground= "White",
                           font=("Bauhaus 93", 20), command= onClick)
generateButton.pack()
generateButton.place(relx= 0.36, rely= 0.40)

    


root.mainloop()

1 个答案:

答案 0 :(得分:0)

您的名称选择更自然地组织为 Radiobutton 小部件。

nameType = StringVar()
nameType.set("Medieval")

medievalCheck = tk.Radiobutton(frame, text= "Medieval", font=("Comic Sans MS", 12),variable= nameType, value="Medieval" )
medievalCheck.place(relx= 0.20, rely= 0.160)

greekmythCheck = tk.Radiobutton(frame, text= "Greek Mythology", font=("Comic Sans MS", 12), variable= nameType, value="Greek Mythology")
greekmythCheck.place(relx= 0.40, rely= 0.160)

其他类型依此类推。

那么对于不断变化的显示,最好的办法是在 StringVar 中添加另一个 Label

displayName = StringVar()
displayName.set("")
labelRandomname = tk.Label(framedisplay, textvariable=displayName, font= ("Broadway", 36), bg="#d3d3d3")
labelRandomname.place(relx= 0.1, rely= 0.35)

最后,您需要一个字典来查找单选按钮状态,并在事件响应器中随机选择

Russianname = ("Boris","Ivan","Anna","Katya")

NameOpts = {"Medieval":Medievalname, "Greek Mythology":GreekMythname, "Japanese":Japanesename,
            "Roman":randomlast, "Fantasy":randomfirst, "Russian":Russianname}

def onClick():
    cat = nameType.get()
    displayName.set(random.choice(NameOpts[cat]))

(我添加了几个俄语名字来覆盖这个选项)