【发布时间】:2018-06-11 05:26:30
【问题描述】:
我正在学习如何使用 Anaconda,因为我想要统计功能。但是,我想用 tkinter 在画布上完成所有工作和数据输入。最后,绘制正态分布。我不确定如何在画布上绘制网格,然后提示用户将数据输入四个单元格,然后在画布上处理所有数据。我希望它最终成为一个独立的程序。
import tkinter as tk
import numpy
import math
def fishers():
cell_a = input("Enter Cell A value: ")
cell_b = input("Enter Cell B value: ")
cell_c = input("Enter Cell C value: ")
cell_d = input("Enter Cell D value: ")
cell_a = float(cell_a)
cell_b = float(cell_b)
cell_c = float(cell_c)
cell_d = float(cell_d)
fenum = math.factorial(cell_a+cell_b)*math.factorial(cell_c+cell_d)*
math.factorial(cell_a+cell_c)*math.factorial(cell_b+cell_d)
feden =
math.factorial(cell_a)*math.factorial(cell_b)*math.factorial(cell_c)*
math.factorial(cell_d)*math.factorial(cell_a+cell_b+cell_c+cell_d)
fe = fenum/feden
print ("Fishers Exact: =\t {:>8.4f}\n".format(fe))
#This is test code to see if I can write into the canvas
self.fishers.canvas.create_text(100,10,fill="darkblue",font="Times 20
italic bold", text="We will enter the data here.")
class Window(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.main_window()
self.widgets()
# All main window parameters go here
def main_window(self):
self.master.title("Quick-Statistics Calculator")
self.master.geometry("1000x800")
self.pack()
def widgets(self):
main_menu = tk.Menu(self.master, tearoff=0)
self.master.config(menu=main_menu)
# Create File Menu and Drop Down
file = tk.Menu(main_menu, tearoff=0)
file.add_command(label="Save")
file.add_separator()
file.add_command(label="Exit", command=exit)
main_menu.add_cascade(label="File", menu=file)
# Create Edit Menu and Drop Down
edit = tk.Menu(main_menu, tearoff=0)
edit.add_command(label="Undo")
main_menu.add_cascade(label="Edit", menu=edit)
#Create Means Analysis Menu and Drop Down
means = tk.Menu(main_menu,tearoff=0)
means.add_command(label="Group t")
means.add_command(label="Paired t")
means.add_separator()
means.add_command(label="ANOVA")
means.add_separator()
means.add_command(label="Mann-Whitney U")
means.add_command(label="Wilcoxon rank sum")
main_menu.add_cascade(label="Means", menu=means)
#Create Chi-square Analysis Menus and Drop Down
chi = tk.Menu(main_menu, tearoff=0)
chi.add_command(label="Chi-Square 2x2 table")
chi.add_command(label="Chi-Square for larger table")
chi.add_separator()
chi.add_command(label="McNemar's Test")
chi.add_command(label="Fisher's Exact", command=fishers)
main_menu.add_cascade(label="Tables", menu=chi)
#Create Help Menu
help = tk.Menu(main_menu, tearoff=0)
help.add_command(label="Means Analysis")
help.add_command(label="Chi-Square Analysis")
main_menu.add_cascade(label="Help",menu=help)
main = tk.Tk()
comm_prog = Window(master=main)
main.mainloop()
【问题讨论】:
-
添加了两个相关标签。可能会使用 MCVE 并丢失更多冗余部分
-
改进了标题
-
当您使用任何 GUI 时,当您使用
input()获取数据时看起来很奇怪。每个 GUI 都有用于在窗口中获取数据的小部件。 -
如果你想绘制正态分布,那么也许你应该使用
matplotlib来绘制它。它可以更容易。您可以使用input()获取数据,然后使用 matplotlibplot()(或hist()创建直方图)和show()显示带有结果的窗口。您也可以将 matplotlib 嵌入到自己的 tkinter 窗口中,但它需要更多的工作。