2013-11-20 3 views
2

Возможно ли разрешить пользователю программы загружать свои данные после того, как они получили ответ от программы о том, какой тест они должны использовать? Я знаю, что мне нужно использовать tkFileDialog, но у меня возникли проблемы с запуском после завершения первой части программы. Дайте мне знать, если это неясно. Мой код до сих пор является:Tkinter FileDialog

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.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('decision', 'You should use the t-test!') 

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

     elif 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() == 1 and q8.get() == 2 and q9.get() == 2: 
      tkMessageBox.showinfo('decision', 'You should use the paired t-test!') 

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

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

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

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

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

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



root.mainloop() 
+0

Определить «загрузить». Что должно произойти с данными после того, как пользователь выберет файл из диалогового окна файла? – Kevin

+0

Долгосрочная цель - использовать файл, который они выбрали для запуска какой-либо статистической программы, которую им сказали, что наилучшим образом соответствует их данным. Прямо сейчас, я должен иметь возможность разрешить им выбирать файл, который они хотят использовать. – kellie92

+0

Являются ли тесты 2-prop тем, что вы хотите открыть после ответа на все вопросы? Если это так, хранятся ли они в любом месте доступа (например, сервер или каждый использует один компьютер)? – Benjooster

ответ

0

Я понял это самостоятельно, с некоторой помощью из Интернета, конечно. Мой обновленный код:

from Tkinter import * 
import tkMessageBox 
from scipy import stats 
import csv 


sample=[] 


def load_file(): 

    fname = askopenfilename(filetypes = (("Text Files", ".txt"), 
          ("HTML Files", "*.html;*.htm"), 
           ("All Files", "*.*"))) 
    global sample 
    if fname: 
     print "uploading file...",fname 
     try: 
      print("""Here comes the file""") 
     except: 
      showerror("Open Source File", "Failed to read file\n'%s'" % fname) 
     ifile = open(fname, "rb") 

     data = csv.reader(ifile,delimiter=' ') 

     rownum = 0 

     for row in data: 
      colnum = 0 
      d=[] 
      for col in row: 
       print '%s' % col 
       d.append(float(col)) 
       colnum += 1 
      sample.append(d) 
      rownum += 1 

     ifile.close() 
     print sample 


def choose(): 

     global sample 
     if q1.get() == 1 and q2.get() == 1 and q3.get() == 1 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('t-test', 't-value is %s, p=%s' %stats.ttest_1samp(sample[0], 0.50)) 
      #will do t-test here 
      print sample 
      # now sample list contains the data for doing t-test, 
      #you just need to call t-test to get the results and show it on message box 


     elif q1.get() == 1 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 2 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2: 
      tkMessageBox.showinfo('z-test', 'test statistic is %s, p=%s'%stats.ttest_1samp(sample[0], 5.0)) 

     elif 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() == 1 and q8.get() == 2 and q9.get() == 2: 
      tkMessageBox.showinfo('Paired t-test', 'test statistic is %s, p=%s'%stats.ttest_rel(sample[0], sample[1])) 

     elif q1.get() == 2 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and q5.get() == 1 and q6.get() == 1 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2: 
      tkMessageBox.showinfo('Two sample t-test', 'test statistic is %s, p=%s'%stats.ttest_ind(sample[0], sample[1])) 

     elif q1.get() == 2 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 1 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2: 
      tkMessageBox.showinfo('Two sample z-test', 'test statistic is %s, p=%s'%stats.ttest_ind(sample[0], sample[1])) 



     else: 
      tkMessageBox.showinfo('decision', 'You have either incorrectly answered a question about your data or none of the available tests are appropriate.') 
      #root.destroy() 
root = Tk() 

q1 = IntVar() 

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

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


q2 = IntVar() 

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

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

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



q3 = IntVar() 

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

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

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


q4 = IntVar() 

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

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

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


q5 = IntVar() 

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

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

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


q6 = IntVar() 

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

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

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




q7 = IntVar() 

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

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

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



q8 = IntVar() 

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

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

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



q9 = IntVar() 

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

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

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




from tkFileDialog import askopenfilename 
from tkMessageBox import showerror 

Button(root,text = "Browse files", command = load_file, width = 10).pack() 



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




root.mainloop() 
+0

ваше сообщение плохо отформатировано. Не могли бы вы занять несколько минут, чтобы исправить это? –

+0

Если это для вас это не имеет значения, но если у вас будут другие люди, прикасающиеся к коду, вы должны поместить весь свой импорт в верхней части своего модуля. Проверьте это, чтобы узнать больше о форматировании: http://www.python.org/dev/peps/pep-0008/#imports – Benjooster

0

Если все файлы, необходимые для открытия доступны из центрального расположения, вы могли бы ваше if заявление открыть файл им необходимую для них.

Попробуйте установить эти файлы в качестве переменных:

t_test = r'Path\To\File\location\t-test.file'

и так далее для остальных файлов.

Затем, вместо того, чтобы говорить им, что открыть просто открыть его с os.system():

os.system(t_test)

Не забудьте import os с остальной частью Вашего импорта.

+0

Не совсем, это моя вина, потому что мой вопрос был не таким ясным, каким он должен был быть. Я понял. Я добавил кнопку для просмотра файлов на моем компьютере или на компьютере пользователя. Спасибо за попытку. Я отправлю свой код. – kellie92

+0

Кажется, что ваше решение имеет пользовательский просмотр файла. Если вы хотите, чтобы пользователь открыл правильный файл. Если вы упаковываете файлы с помощью приложения tkinter, вы можете заставить пользователя открыть правильный, поскольку их путь всегда будет одинаковым. – Benjooster

Смежные вопросы