繁体   English   中英

Python Tkinter单选按钮程序调试

[英]Python Tkinter radiobutton program debugging

本质上,该程序是一组单选按钮,当用户单击提交按钮时,该程序应返回与用户所做的选择字符串匹配的答案。 我已经让它在很大程度上起作用了,但最终做出的决定仍然是错误的。 让我知道我是否可以回答更多问题。

from Tkinter import *
import tkMessageBox


root = Tk()

q1 = IntVar()

Label(root,
      text="""How many samples do you have?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text="One",
            padx = 20,
            variable=q1,
            value=1).pack(anchor=W)

Radiobutton(root,
            text="Two",
            padx = 20,
            variable=q1,
            value=2).pack(anchor=W)


q2 = IntVar()

Label(root,
      text="""Which choice most closely fits your sample size?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Less than 30""",
            padx = 20,
            variable=q2,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """Greater than or equal to 30""",
            padx = 20,
            variable=q2,
            value = 2).pack(anchor =W)



q3 = IntVar()

Label(root,
      text="""Is the population mean known?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q3,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q3,
            value = 2).pack(anchor=W)


q4 = IntVar()

Label(root,
      text="""Is the standard deviation of your data known?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q4,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q4,
            value = 2).pack(anchor =W)


q5 = IntVar()

Label(root,
      text="""Do you wish to compare two groups?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q5,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q5,
            value = 2).pack(anchor =W)


q6 = IntVar()

Label(root,
      text="""Do you want to compare two sample means?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q6,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q6,
            value = 2).pack(anchor =W)




q7 = IntVar()

Label(root,
      text="""Is your data paired (E.g. before and after data)?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q7,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q7,
            value = 2).pack(anchor =W)



q8 = IntVar()

Label(root,
      text="""Are you testing proportions?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q8,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q8,
            value = 2).pack(anchor =W)



q9 = IntVar()

Label(root,
      text="""Do you wish to test for a difference between observed and expected data?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q9,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q9,
            value = 2).pack(anchor =W)


Button(root, text = "Submit", command=choose).pack()

def choose():
    if q1 == 1 and q2 == 1 and q3 == 2 and q4 == 2 and  q5 == 1 and q6 == 2 and q7 == 2 and q8 == 2 and q9 == 2 :
        tkMessageBox.showinfo( 'You should use the t-test!')

    elif q1 == 1 and q2 == 2 and q3 == 1 and q4 == 1 and q5 == 2 and q6 == 2 and q7 == 2 and  q8 == 2 and q9 == 2:
        tkMessageBox.showinfo('You should use the z-test!')

    elif q1 == 1 and q2 == 1 and q3 == 2 and q4 == 2 and q5 == 1 and q6 == 2 and q7 == 1 and q8 == 2 and q9 == 2:
        tkMessageBox.showinfo( 'You should use the paired t-test!')

    elif q1 == 2 and q2 == 1 and q3 == 2 and q4 == 2 and q5 == 1 and q6 == 1 and q7 == 2 and q8 == 2 and q9 == 2:
        tkMessageBox.showinfo( 'You should use the two-sample t-test!')

    elif q1 == 2 and q2 == 2 and q3 == 1 and q4 == 1 and q5 == 2 and q6 == 1 and q7 == 2 and q8 == 2 and q9 == 2:
        tkMessageBox.showinfo('You should use the two-sample z-test!')

    elif q1 == 1 and q2 == 2 and q3 == 1 and q4 == 1 and q5 == 2 and q6 == 2 and q7 == 2 and q8 == 1 and q9 == 2:
        tkMessageBox.showinfo('You should use the 1-prop z-test!')

    elif q1 == 2 and q2 == 2 and q3 == 1 and q4 == 1 and q5 == 2 and q6 == 2 and q7 == 2 and q8 == 1 and q9 == 2:
        tkMessageBox.showinfo('You should use the 2-prop z-test!')

    elif q1 == 1 and q2 == 2 and q3 == 2 and q4 == 2 and q5 == 2 and q6 == 2 and q7 == 2 and q8 == 2 and q9 == 1:
        tkMessageBox.showinfo( 'You should use the chi-square test!')

    else:
        tkMessageBox.showinfo('You have either incorrectly answered a question about your data or none of the available tests are appropriate.')
        sys.exit()

root.mainloop()

您应该在比较Intvar实例时使用get方法,并且您的tkMessageBox.showinfo(title, message)函数需要两个参数,而不是只传递标题而没有消息,因此将代码更改为如下所示:

if q1.get() == 1 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and  q5.get() == 1 and q6.get() == 2 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2 :
    tkMessageBox.showinfo('Info','You should use the t-test!')

并且也不要使用sys.exit()退出你的程序它会导致你的程序没有响应而是使用root.destroy()

希望您的消息框现在应该按预期工作!

在此处输入图片说明

可选:使用tkMessageBox.showerror(title, message)显示错误消息

您应该允许未找到的条件。 列表还可以更容易地理解恕我直言。 以下内容应该是不言自明的。 它只测试前两个条件,第三个选项可以轻松测试代码,并添加了打印语句进行测试。 你可以从那里扩展。 此外,使用列表或函数将大大减少“标签、按钮和按钮”代码的数量。

from Tkinter import *
import tkMessageBox


def compare_lists(q_list, results_list):
    """ see if the radio buttons are in one of the results
        If so, return the number of the matching list
    """
    for ctr, sub_list in enumerate(results_list):
        if sub_list == q_list:
            print "Found", ctr, sub_list
            return ctr
    return -1

def choose():
    q_list = []
    results_list = [[1, 1, 2, 2, 1, 2, 2, 2, 2],
                    [1, 2, 1, 1, 2, 2, 2, 2, 2],
                    [1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1]]
    print_list = ['You should use the t-test!',
                  'You should use the z-test!',
                  'Testing Only']
    for var in (q1, q2, q3, q4, q5, q6, q7, q8, q9):
        q_list.append(var.get())
    print q_list

    ## ctr = number of matching list and will print
    ## the same number in the print list
    ctr = compare_lists(q_list, results_list)
    if ctr > -1:
        result_label.set(print_list[ctr])
    else:
        result_label.set('Combination not found')

root = Tk()

q1 = IntVar()

Label(root,
      text="""How many samples do you have?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
        text="One",
        padx = 20,
        variable=q1,
        value=1).pack(anchor=W)

Radiobutton(root,
        text="Two",
        padx = 20,
        variable=q1,
        value=2).pack(anchor=W)


q2 = IntVar()

Label(root,
  text="""Which choice most closely fits your sample size?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Less than 30""",
        padx = 20,
        variable=q2,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """Greater than or equal to 30""",
        padx = 20,
        variable=q2,
        value = 2).pack(anchor =W)



q3 = IntVar()

Label(root,
  text="""Is the population mean known?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q3,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q3,
        value = 2).pack(anchor=W)


q4 = IntVar()

Label(root,
  text="""Is the standard deviation of your data known?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q4,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q4,
        value = 2).pack(anchor =W)


q5 = IntVar()

Label(root,
  text="""Do you wish to compare two groups?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q5,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q5,
        value = 2).pack(anchor =W)


q6 = IntVar()

Label(root,
  text="""Do you want to compare two sample means?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q6,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q6,
        value = 2).pack(anchor =W)




q7 = IntVar()

Label(root,
  text="""Is your data paired (E.g. before and after data)?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q7,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q7,
        value = 2).pack(anchor =W)



q8 = IntVar()

Label(root,
  text="""Are you testing proportions?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q8,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q8,
        value = 2).pack(anchor =W)



q9 = IntVar()

Label(root,
  text="""Do you wish to test for a difference between observed and expected data?""",
  justify = LEFT,
  padx = 20).pack()

Radiobutton(root,
        text = """Yes""",
        padx = 20,
        variable=q9,
        value = 1).pack(anchor=W)

Radiobutton(root,
        text = """No""",
        padx = 20,
        variable=q9,
        value = 2).pack(anchor =W)


result_label = StringVar()
result_label.set("")
Label(root, textvariable=result_label, fg="red").pack()
Button(root, text = "Submit", command=choose, fg="blue", bg="white").pack()
Button(root, text = "EXIT", command=root.quit,
       bg="blue", fg="yellow").pack()

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM