【发布时间】:2016-01-30 23:25:03
【问题描述】:
我决定尝试编写一个程序,该程序可以根据从体脂测试仪获得的测量值来计算您的体脂百分比。几年前,我为一个朋友创建了一个 Excel 电子表格,这样他就可以计算他的客户的体脂百分比。我认为创建一个程序供他使用会很酷,也可以让我练习一些东西。
当我运行程序时,除了 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()
【问题讨论】:
-
你是在terminal/console/cmd.exe中运行看看有没有报错吗?
-
要为 Mac 创建可执行文件,您必须在 Mac 上创建它。
-
我在 Mac 上的 PyCharm 上运行它。窗口弹出来,一片空白。有没有更好的办法?
-
PyCharm 应该有
console窗口,显示错误和由print()在脚本中打印的文本。 -
我检查了代码,没有错误信息。此刻我不知道为什么 tkinter 窗口是空的。