#python #tkinter
#питон #tkinter
Вопрос:
Я создал программу для угадывания песен с помощью Tkinter, и у меня есть такая программа, чтобы пользователи нажимали кнопку для воспроизведения песни, вводили, какая, по их мнению, песня, и после прослушивания и угадывания всех песен нажимали отправить. Теперь в правой части полей ввода у меня есть метка, которая либо показывает текст «Правильный», либо «Неправильный» относительно того, правильно ли они поняли песню, есть ли способ сделать этот текст зеленым, когда они поняли его правильно, и красным, когда они поняли это неправильно. Я поэкспериментировал с несколькими вещами, перечисленными в приведенном ниже коде.
from playsound import playsound
import tkinter as tk
from tkinter import *
master=tk.Tk()
master.title("Song Guessing Game")
master.config(bg="ghost white")
def play1():
playsound("sickomode.mp3")
def play2():
playsound("onedance.mp3")
def play3():
playsound("uptownfunk.mp3")
def play4():
playsound("shapeofyou.mp3")
tk.Label(master,text="Song Guesser",font="Verdanda 20 underline bold",bg="ghost white",fg="black").grid(row=0,column=1)
tk.Button(master,text="Play Song 1",command=play1,font="Verdanda 15 bold").grid(row=1,column=0)
tk.Button(master,text="Play Song 2",command=play2,font="Verdanda 15 bold").grid(row=2,column=0)
tk.Button(master,text="Play Song 3",command=play3,font="Verdanda 15 bold").grid(row=3,column=0)
tk.Button(master,text="Play Song 4",command=play4,font="Verdanda 15 bold").grid(row=4,column=0)
guess1=tk.Entry(master,bg="ghost white",fg="black",font="Verdanda 15")
guess2=tk.Entry(master,bg="ghost white",fg="black",font="Verdanda 15")
guess3=tk.Entry(master,bg="ghost white",fg="black",font="Verdanda 15")
guess4=tk.Entry(master,bg="ghost white",fg="black",font="Verdanda 15")
guess1.grid(row=1,column=1)
guess2.grid(row=2,column=1)
guess3.grid(row=3,column=1)
guess4.grid(row=4,column=1)
def submit():
s1guess=str(guess1.get()).upper()
if s1guess=="SICKO MODE":
print ("Correct")
status.set("Correct")
elif s1guess!="SICKO MODE":
print("Incorrect")
status.set("Incorrect")
s2guess=str(guess2.get()).upper()
if s2guess=="ONE DANCE":
print("Correct")
status2.set("Correct")
elif s2guess!="ONE DANCE":
print("Incorrect")
status2.set("Incorrect")
s3guess=str(guess3.get()).upper()
if s3guess=="UPTOWN FUNK":
print("Correct")
status3.set("Correct")
elif s3guess!="UPTOWN FUNK":
print("Incorrect")
status3.set("Incorrect")
s4guess=str(guess4.get()).upper()
if s4guess=="SHAPE OF YOU":
print("Correct")
status4.set("Correct")
elif s4guess!="SHAPE OF YOU":
print("Incorrect")
status4.set("Incorrect")
status=StringVar()
status2=StringVar()
status3=StringVar()
status4=StringVar()
scolor=StringVar()
s2color=StringVar()
s3color=StringVar()
s4color=StringVar()
tk.Label(master,textvariable=status,font="Verdanda 15 bold",fg=scolor.get()).grid(row=1,column=2)
tk.Label(master,textvariable=status2,font="Verdanda 15 bold",fg=s2color.get()).grid(row=2,column=2)
tk.Label(master,textvariable=status3,font="Verdanda 15 bold",fg=s3color.get()).grid(row=3,column=2)
tk.Label(master,textvariable=status4,font="Verdanda 15 bold",fg=s4color.get()).grid(row=4,column=2)
tk.Button(master,text="Submit Score",command=submit).grid(row=5,column=1)
master.mainloop()
Основная область, на которую я смотрю, — это нижний набор меток. С помощью текущего способа, которым я это сделал, мне удалось заставить его работать, но значением по умолчанию для переменных scolor является просто «», который не является цветом, и поэтому код не работает
Ответ №1:
Используйте метод configure:
...
label.configure(foreground='[colour you want]')
...
Ответ №2:
Вам нужно использовать Label.config(fg=...)
для изменения цвета переднего плана a Label
, поэтому вам нужно назначить переменные для меток результатов:
label1 = tk.Label(master, font="Verdanda 15 bold", width=10)
label2 = tk.Label(master, font="Verdanda 15 bold", width=10)
label3 = tk.Label(master, font="Verdanda 15 bold", width=10)
label4 = tk.Label(master, font="Verdanda 15 bold", width=10)
label1.grid(row=1, column=2)
label2.grid(row=2, column=2)
label3.grid(row=3, column=2)
label4.grid(row=4, column=2)
Затем измените submit()
, чтобы изменить цвет переднего плана этих меток на основе результата угадывания:
def submit():
def check(guess, expected, label):
if guess.get().strip().upper() == expected:
label.config(text="Correct", fg="green")
else:
label.config(text="Incorrect", fg="red")
check(guess1, "SICKO MODE", label1)
check(guess2, "ONE DANCE", label2)
check(guess3, "UPTOWN FUNK", label3)
check(guess4, "SHAPE OF YOU", label4)
Обратите внимание, что вам вообще не нужны эти statusX
переменные и sXcolor
переменные.