tkinter - 3个radiobuttons中的2个被勾选

时间:2016-05-19 10:12:10

标签: python tkinter

我目前正在使用tkinter运行Python 3.3.2并且我一直遇到同样的问题。当我用单选按钮创建一个新窗口时,3个单选按钮中有2个被勾选,但我不确定为什么;我试过玩我的代码,但似乎没有用。如果有人能明白为什么,我将非常感激。这是我的代码:

def shape_Menu():
    def triangle_choice():
        def updatetext(event):
            answer.delete(0, END)
            window1.update_idletasks()

        def check_Answer(event):
            if answer.get() == area:
                canvas.create_text(150, 95, text='Width='+str(random_number2)+'cm', font=('arial', 45, bold), fill=green)

        def correct():
            print('correct!!!')

        def incorrect():
            print('Incorrect!!!')

        window1 = tk.Tk()
        window1.geometry('875x450+375+325') 
        window1.title('Triangle')
        canvas = Canvas(window1, width=200, height=150)  
        canvas.pack(side=tk.LEFT, padx=40, pady=35)
        canvas.create_polygon((0, 100, 50, 0, 100, 100), fill="blue")


        random_number1 = random.randint(1,12)
        canvas.create_text(150, 75, text='Length='+str(random_number1)+'cm', font=('arial', 10))

        random_number2 = random.randint(1,12)
        canvas.create_text(150, 95, text='Width='+str(random_number2)+'cm', font=('arial', 10))

        canvas.create_text(80, 115, text='Area = (Length * Width) / 2', font=('arial', 10))

        area = (random_number1 * random_number2) / 2

        random_num = random.randint(0,3)

        random1 = random.uniform(1,100)
        random1 = round(random1, 2)

        random2 = float(random.randint(1,100))

        v = IntVar()

        if random_num == 1:
            c1 = Radiobutton(window1, text=area, variable=v, value=1, command=correct).pack(side=RIGHT, padx=50, pady=25)
            c2 = Radiobutton(window1, text=(random1), variable=v, value=2, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
            c3 = Radiobutton(window1, text=(random2), variable=v, value=3, command=incorrect).pack(side=RIGHT, padx=50, pady=25)

        elif random_num == 2:
            c1 = Radiobutton(window1, text=(random1), variable=v, value=1, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
            c2 = Radiobutton(window1, text=area, variable=v, value=2, command=correct).pack(side=RIGHT, padx=50, pady=25)
            c3 = Radiobutton(window1, text=(random2), variable=v, value=3, command=incorrect).pack(side=RIGHT, padx=50, pady=25)

        else:
            c1 = Radiobutton(window1, text=(random1), variable=v, value=1, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
            c2 = Radiobutton(window1, text=(random2), variable=v, value=2, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
            c3 = Radiobutton(window1, text=area, variable=v, value=3, command=correct).pack(side=RIGHT, padx=50, pady=25)

    def circle_choice():
        root = tk.Tk()
        root.geometry('300x160')
        root.eval('tk::PlaceWindow %s center' % root.winfo_pathname(root.winfo_id()))
        root.title('Circle')

1 个答案:

答案 0 :(得分:0)

我按如下方式运行您的代码,并且没有看到单选按钮有任何问题。不确定你的意思"当我创建一个带有单选按钮的新窗口"

from tkinter import *

import random

window1 = Tk()
window1.geometry('875x450+375+325')
window1.title('Triangle')
canvas = Canvas(window1, width=200, height=150)
canvas.pack(side=LEFT, padx=40, pady=35)
canvas.create_polygon((0, 100, 50, 0, 100, 100), fill="blue")


random_number1 = random.randint(1,12)
canvas.create_text(150, 75, text='Length='+str(random_number1)+'cm', font=('arial', 10))

random_number2 = random.randint(1,12)
canvas.create_text(150, 95, text='Width='+str(random_number2)+'cm', font=('arial', 10))

canvas.create_text(80, 115, text='Area = (Length * Width) / 2', font=('arial', 10))

area = (random_number1 * random_number2) / 2

random_num = random.randint(0,3)

random1 = random.uniform(1,100)
random1 = round(random1, 2)

random2 = float(random.randint(1,100))

v = IntVar()

def correct():
    print('correct!!!')

def incorrect():
    print('Incorrect!!!')

if random_num == 1:
    c1 = Radiobutton(window1, text=area, variable=v, value=1, command=correct).pack(side=RIGHT, padx=50, pady=25)
    c2 = Radiobutton(window1, text=(random1), variable=v, value=2, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
    c3 = Radiobutton(window1, text=(random2), variable=v, value=3, command=incorrect).pack(side=RIGHT, padx=50, pady=25)

elif random_num == 2:
    c1 = Radiobutton(window1, text=(random1), variable=v, value=1, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
    c2 = Radiobutton(window1, text=area, variable=v, value=2, command=correct).pack(side=RIGHT, padx=50, pady=25)
    c3 = Radiobutton(window1, text=(random2), variable=v, value=3, command=incorrect).pack(side=RIGHT, padx=50, pady=25)

else:
    c1 = Radiobutton(window1, text=(random1), variable=v, value=1, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
    c2 = Radiobutton(window1, text=(random2), variable=v, value=2, command=incorrect).pack(side=RIGHT, padx=50, pady=25)
    c3 = Radiobutton(window1, text=area, variable=v, value=3, command=correct).pack(side=RIGHT, padx=50, pady=25)

window1.mainloop()

请进一步详细说明和/或提供代码的工作示例,以便我们进一步排除故障。

由于