2016-01-30 2 views
0

Я решил попробовать написать программу, которая рассчитала бы ваши проценты жировых отложений на основе измерений, взятых из тестера жировых отложений. Я создал таблицу Excel за несколько лет назад для собеседника, чтобы он мог рассчитать процентный процент жировых отложений своих клиентов. Я подумал, что было бы здорово создать программу для его использования, и это также даст мне возможность практиковать.Tkinter GUI Window Blank

Когда я запускаю программу, она работает без каких-либо проблем, кроме того, что окно Tkinter полностью заполняется. Может ли кто-нибудь определить, что я сделал неправильно в своем коде?

Также, если я получу эту работу, есть ли в любом случае я могу создать исполняемый файл, чтобы дать моему приятелю или каким-то образом запустить рабочий стол для запуска сценария python? Он будет использовать Mac, поэтому с уже установленным python я полагаю, что есть, вероятно, какой-то способ запуска терминала, но я не знаю, как это будет сделано.

Любая помощь будет принята с благодарностью, код ниже:

__author__ = 'jared' 

import tkinter 
import tkinter.messagebox 
import cmath 

class BodyFatGUI: 

def __init__(self): 

    #Create Main Window 
    self.main_window = tkinter.Tk() 

    #Create Frames for wigets 
    self.gender_frame = tkinter.Frame(self.main_window) 
    self.tricep_frame = tkinter.Frame(self.main_window) 
    self.chest_frame = tkinter.Frame(self.main_window) 
    self.abdominal_frame = tkinter.Frame(self.main_window) 
    self.suprailiac_frame = tkinter.Frame(self.main_window) 
    self.thigh_frame = tkinter.Frame(self.main_window) 
    self.button_frame = tkinter.Frame(self.main_window) 

    #Initialize Radio Buttons 
    self.radio_var = tkinter.IntVar() 
    self.radio_var.set(1) 

    #Create gender widgets 
    self.rb1 = tkinter.Radiobutton(self.gender_frame, text = 'Male', variable=self.radio_var, \ 
           value = 1) 

    self.rb2 = tkinter.Radiobutton(self.gender_frame, text = 'Female', variable=self.radio_var, \ 
           value = 2) 

    #Create age widget 
    self.age_label = tkinter.Label(self.gender_frame, text='Age:') 
    self.age_entry = tkinter.Entry(self.gender_frame, width='7') 

    #Create skinfold widgets 
    self.tricep_label = tkinter.Label(self.tricep_frame, text='Enter Tricep skinfold measurement:') 
    self.tricep_entry = tkinter.Entry(self.tricep_frame, width=10) 
    self.chest_label = tkinter.Label(self.chest_frame, text='Enter Chest skinfold measurement:') 
    self.chest_entry = tkinter.Entry(self.chest_frame, width=10) 
    self.abdominal_label = tkinter.Label(self.abdominal_frame, text = 'Enter Abdominal measurement:') 
    self.abdominal_entry = tkinter.Entry(self.abdominal_frame, width=10) 
    self.suprailiac_label = tkinter.Label(self.suprailiac_frame, text='Enter Suprailiac measurement:') 
    self.suprailiac_entry = tkinter.Entry(self.suprailiac_frame, width=10) 
    self.thigh_label = tkinter.Label(self.thigh_frame, text='Enter Thigh measurement:') 
    self.thigh_entry = tkinter.Entry(self.thigh_frame, width=10) 

    #create button frame 
    self.calc_button = tkinter.Button(self.button_frame, text='Calculate', command=self.bodyfat) 
    self.quit_button = tkinter.Button(self.button_frame, text='Quit', command=self.main_window.destroy) 

    #Pack the widgets 
    self.rb1.pack(side='left') 
    self.rb2.pack(side='left') 
    self.age_label.pack(side='right') 
    self.age_label.pack(side='right') 
    self.tricep_label.pack(side='left') 
    self.tricep_entry.pack(side='left') 
    self.chest_label.pack(side='left') 
    self.chest_entry.pack(side='left') 
    self.abdominal_label.pack(side='left') 
    self.abdominal_entry.pack(side='left') 
    self.suprailiac_label.pack(side='left') 
    self.suprailiac_entry.pack(side='left') 
    self.thigh_label.pack(side='left') 
    self.thigh_entry.pack(side='left') 
    self.calc_button.pack(side='left') 
    self.quit_button.pack(side='left') 

    tkinter.mainloop() 

def bodyfat(self): 
    #Get value entered from user 

    tri = float(self.tricep_entry.get()) 
    chest = float(self.chest_entry.get()) 
    ab = float(self.abdominal_entry.get()) 
    sup = float(self.suprailiac_entry.get()) 
    thigh = float(self.thigh_entry.get()) 
    age = float(self.age_entry.get()) 

    sum = tri + chest + ab + sup + thigh 

    if self.radio_var.get() is 'Male': 

     bd = 1.1093800 - 0.008267*sum + 0.0000016*sum^2 - 0.0001392*age 
     fat = ((4.570/bd) - 4.142)*100 
     tkinter.messagebox.showinfo('Results', 'Your calculated body fat percentage is: ' + str(fat)) 

    elif self.radio_var.get() is 'Female': 

     bd = 1.0994921 - 0.0009929*sum + 0.0000023*sum^2 - 0.0001392*age 
     fat = ((4.570/bd) - 4.142)*100 
     tkinter.messagebox.showinfo('Results', 'Your calculated body fat percentage is: ' + str(fat)) 

body_fat = BodyFatGUI() 
+0

вы запустите его в терминале/консоли/cmd.exe, чтобы увидеть, если нет сообщений об ошибке? – furas

+0

, чтобы создать исполняемый файл для Mac, вы должны создать его на Mac. – furas

+0

Я запустил его на PyCharm на Mac. Окно появилось и было пустым. Есть ли способ лучше? –

ответ

1

Вы забыли использовать pack() со всеми кадрами.

Вам это нужно поставить кадры в окне:

self.gender_frame.pack() 
self.tricep_frame.pack() 
self.chest_frame.pack() 
self.abdominal_frame.pack() 
self.suprailiac_frame.pack() 
self.thigh_frame.pack() 
self.button_frame.pack() 
+0

Удивительный! Спасибо, вот и все! –

+0

Мне пришлось изменить несколько строк. Появляется метка возраста, но места для входа нет. я заметил, что эта строка кода: self.age_entry = tkinter.Entry (self.gender_frame, ширина = «7») должен иметь «7» изменено на 7, но она по-прежнему не появляется. Я добавил строку self.age_frame.pack() в вашу рекомендацию выше. Есть что-то еще, что мне не хватает? Еще раз спасибо за вашу помощь. Редактировать: Я понял, что мне не нужно упаковывать и создавать «age_frame», так как он находится в том же фрейме, что и «gender_frame», это правильно? –

+0

Нашел. У меня был age_label дважды, мне нужен был age_entry. –