用 tkinter/python 代码比较两个字典很麻烦

Trouble to compare two dictionnaries with a tkinter/python code

提问人:Serfrousse Serfrousse 提问时间:8/9/2023 更新时间:8/10/2023 访问量:42

问:

我想将我的good_answer词典与我的结果词典进行比较。我的项目是随机生成项目,除了与图片关联的项目也随机选择。问题是我无法将用户答案与严格的答案进行比较。

我尝试了多种方法。首先是 set() - set(),但问题是我擅长使用 r1 和 r2 和 img2。所以我尝试将 var.get() : [can.image] 更改为 var.get() : [RandomImage],因为程序返回一些复杂的“tkinter.PhotoImage 对象位于 0*0000....“ 但我的代码没有实现我在单击 b1 时更改图像的事实。我不知道我能做什么。我被困在这里。 我是一个初学者,我认为我从一个太复杂的项目开始了。但是,我想了解这里的问题。 对不起,如果我的代码很糟糕。

from tkinter import * 
from PIL import Image, ImageTk
import os
import random
import pandas 

imagelist = ['C:\\Users\\...\\Desktop\\ECG Learner\\ecg.png','C:\\Users\\...\\Desktop\\ECG Learner\\img2.png']
textlist = ["1", "2", "3", "4"]

good_answer = {"1" : ['C:\\Users\\Noé\\Desktop\\ECG Learner\\ecg.png'],"2":['C:\\Users\\Noé\\Desktop\\ECG Learner\\img2.png']}

def open_fenetre2 () :
    fenetre2 = Tk()

def callback () :
    textlist = ["1", "2", "3", "4"]
    can.delete("all")
    RandomImage = random.choice(imagelist)  
    im = (RandomImage)
    img=PhotoImage(file=im)
    can.configure(width=img.width(), height=img.height())
    can.create_image(img.width()/2,img.height()/2,image=img)
    can.image =img
    n1 = random.randrange(len(textlist))
    RandomText1 =textlist[n1]
    del(textlist[n1])
    n2 = random.randrange(len(textlist))
    RandomText2 = textlist[n2]
    del(textlist[n2])
    n3 = random.randrange(len(textlist))
    RandomText3 =textlist[n3]
    del(textlist[n3])
    n4 = random.randrange(len(textlist))
    RandomText4 = textlist[n4]
    del(textlist[n4])

    r1.config(text=RandomText1)
    r2.config(text=RandomText2)
    r3.config(text=RandomText3)
    r4.config(text=RandomText4)


def selected ():
    print(var.get())

def verification () :
    resultat = { var.get() : [can.image]}
    print(resultat)
    diff = set(resultat)- set(good_answer)
    print(diff)
    if diff == set() :
        print("vrai")
        true.config(bg = "green")
        false.config(bg="white")
    else :
        print("faux")
        false.config(bg = "red")
        true.config(bg="white")
        




n1 = random.randrange(len(textlist))
RandomText1 =textlist[n1]
del(textlist[n1])
n2 = random.randrange(len(textlist))
RandomText2 = textlist[n2]
del(textlist[n2])
n3 = random.randrange(len(textlist))
RandomText3 =textlist[n3]
del(textlist[n3])
n4 = random.randrange(len(textlist))
RandomText4 = textlist[n4]
del(textlist[n4])

fenetre = Tk()
fenetre.title("ECG Learner")
fenetre.config(bg="white")
fenetre.geometry("500x500")
fenetre.minsize(200,200)

can = Canvas(fenetre)
can.pack()

RandomImage = random.choice(imagelist)  
im = (RandomImage)
img=PhotoImage(file=im)
can.configure(width=img.width(), height=img.height())
can.create_image(img.width()/2,img.height()/2,image=img)
can.image =img

can2 = Canvas(fenetre)
can2.pack(anchor ="s")


menu1 = Menu(fenetre)
menu1.add_cascade(label ="fichier")
menu1.add_cascade(label ="option")
menu1.add_cascade(label ="aide")
fenetre.config(menu = menu1)


cadre1 = Frame(fenetre)
cadre1.pack()

var = StringVar()


b1 = Button (cadre1, text = 'Next ECG', command=callback)
b1.pack()

b2 = Button (cadre1, text = 'Quitter', command= fenetre.destroy)
b2.pack()

b3 = Button (fenetre, text ="Valider", command= verification)
b3.pack()


r1 = Radiobutton(can2, text = RandomText1, variable = var, value = "1", command = selected)
r1.pack()
r2 = Radiobutton(can2, text = RandomText2, variable = var, value = "2", command = selected)
r2.pack()
r3 = Radiobutton(can2, text = RandomText3, variable = var, value = "3",  command = selected)
r3.pack()
r4 = Radiobutton(can2, text = RandomText4, variable = var, value = "4",  command = selected)
r4.pack()


true = Label(fenetre, text = "Vrai", font =("Courier", 30))
true.pack()
false = Label(fenetre, text = "Faux", font =("Courier", 30))
false.pack()


fenetre.mainloop()

感谢您抽出宝贵时间!!

python tkinter 比较

评论

0赞 toyota Supra 8/9/2023
你为什么被重复?textlist = ["1", "2", "3", "4"]
0赞 Serfrousse Serfrousse 8/9/2023
首先,我用 del() 从列表中删除内容以避免重复。我想如果我不复制列表,就没有什么可拿的了。
0赞 toyota Supra 8/9/2023
在第 8 行和第 14 行
0赞 Serfrousse Serfrousse 8/9/2023
事实上,也许在第 8 行它是无用的

答:

0赞 Сергей Кох 8/10/2023 #1

试着用随机选择来比较答案,而不是两本词典。good_answer[var.get()][0]can.image.cget("file")

from tkinter import *
import random


imagelist = ['C:\\Users\\...\\Desktop\\ECG Learner\\ecg.png','C:\\Users\\...\\Desktop\\ECG Learner\\img2.png']
textlist = ["1", "2", "3", "4"]

good_answer = {"1": ['C:\\Users\\...\\Desktop\\ECG Learner\\ecg.png'],
               "2": ['C:\\Users\\...\\Desktop\\ECG Learner\\img2.png'],
               "3": [""],
          "4": [""]}


def open_fenetre2():
    fenetre2 = Tk()


def callback():
    textlist = ["1", "2", "3", "4"]
    can.delete("all")
    RandomImage = random.choice(imagelist)
    im = (RandomImage)
    img = PhotoImage(file=im)
    can.configure(width=img.width(), height=img.height())
    can.create_image(img.width() / 2, img.height() / 2, image=img)
    can.image = img
    n1 = random.randrange(len(textlist))
    RandomText1 = textlist[n1]
    del (textlist[n1])
    n2 = random.randrange(len(textlist))
    RandomText2 = textlist[n2]
    del (textlist[n2])
    n3 = random.randrange(len(textlist))
    RandomText3 = textlist[n3]
    del (textlist[n3])
    n4 = random.randrange(len(textlist))
    RandomText4 = textlist[n4]
    del (textlist[n4])

    r1.config(text=RandomText1)
    r2.config(text=RandomText2)
    r3.config(text=RandomText3)
    r4.config(text=RandomText4)


def selected():
    print(var.get())


def verification():
    resultat = can.image.cget("file")
    print(resultat)
    choice = good_answer[var.get()][0]
    print(choice)
    if resultat == choice:
        print("vrai")
        true.config(bg="green")
        false.config(bg="white")
    else:
        print("faux")
        false.config(bg="red")
        true.config(bg="white")


n1 = random.randrange(len(textlist))
RandomText1 = textlist[n1]
del (textlist[n1])
n2 = random.randrange(len(textlist))
RandomText2 = textlist[n2]
del (textlist[n2])
n3 = random.randrange(len(textlist))
RandomText3 = textlist[n3]
del (textlist[n3])
n4 = random.randrange(len(textlist))
RandomText4 = textlist[n4]
del (textlist[n4])

fenetre = Tk()
fenetre.title("ECG Learner")
fenetre.config(bg="white")
fenetre.geometry("500x500")
fenetre.minsize(200, 200)

can = Canvas(fenetre)
can.pack()

RandomImage = random.choice(imagelist)
im = (RandomImage)
img = PhotoImage(file=im)
can.configure(width=img.width(), height=img.height())
can.create_image(img.width() / 2, img.height() / 2, image=img)
can.image = img

can2 = Canvas(fenetre)
can2.pack(anchor="s")

menu1 = Menu(fenetre)
menu1.add_cascade(label="fichier")
menu1.add_cascade(label="option")
menu1.add_cascade(label="aide")
fenetre.config(menu=menu1)

cadre1 = Frame(fenetre)
cadre1.pack()

var = StringVar()

b1 = Button(cadre1, text='Next ECG', command=callback)
b1.pack()

b2 = Button(cadre1, text='Quitter', command=fenetre.destroy)
b2.pack()

b3 = Button(fenetre, text="Valider", command=verification)
b3.pack()

r1 = Radiobutton(can2, text=RandomText1, variable=var, value="1", command=selected)
r1.pack()
r2 = Radiobutton(can2, text=RandomText2, variable=var, value="2", command=selected)
r2.pack()
r3 = Radiobutton(can2, text=RandomText3, variable=var, value="3", command=selected)
r3.pack()
r4 = Radiobutton(can2, text=RandomText4, variable=var, value="4", command=selected)
r4.pack()

true = Label(fenetre, text="Vrai", font=("Courier", 30))
true.pack()
false = Label(fenetre, text="Faux", font=("Courier", 30))
false.pack()

fenetre.mainloop()