python - 为什么我的 wxPython 程序不工作?(内码)
问题描述
所以我必须写一个BMI计算器。我无法让它工作。
在我添加类和方法之前,它工作正常,但为了使计算按钮工作,我必须使用一个类。一旦我这样做了,它就坏了。
你能告诉我我做错了什么吗?
import wx
class BMI(wx.Frame):
def InitUI(self):
window = wx.Frame(self, title="wx.SpinCtrl", size=(400, 300))
panel = wx.Panel(window)
label = wx.StaticText(panel, label="Body Mass Index", pos=(20, 10))
self.weight = wx.StaticText(panel, label="weight:", pos=(20, 70))
self.height = wx.StaticText(panel, label="height:", pos=(20, 140))
weightset = wx.SpinCtrl(panel, value='0', pos=(100, 70))
heightset = wx.SpinCtrl(panel, value='0', pos=(100, 140))
result = wx.StaticText(panel, label="BMI:", pos=(300, 110))
result2 = wx.StaticText(panel, label=" ", pos=(335, 110))
computeButton = wx.Button(panel, label='Compute', pos=(40, 200))
closeButton = wx.Button(panel, label='Close', pos=(250, 200))
computeButton.Bind(wx.EVT_BUTTON, self.ComBMI)
closeButton.Bind(wx.EVT_BUTTON, self.OnClose)
def ComBMI(self, e):
teglo = self.weight.GetValue()
vis = self.height.GetValue()
bmi = teglo * (pow(vis, 2))
self.result2.SetLabel(str(bmi))
def OnClose(self, e):
self.Close(True)
def main():
app = wx.App()
ex = BMI(None)
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
解决方案
呃,问题是为什么这一切都有效......
问题(可能不完整):
- 没有正确初始化类
BMI
(请参阅如何正确使用类的教程wx.Frame
) - 使用
SpinCtrl
将不允许以米为单位输入身高或将人的身高限制在 100 厘米(顺便说一下,体重为 100 公斤)。改用 asTextCtrl
并解析值float
(或修改 的范围/分辨率SpinCtrl
) - 您
self.weigth.GetValue()
对对象属性执行操作,但用户输入转到self.weightset
- 错误的 BMI 公式(在 wiki 上查找),链接到错误的单位
推荐阅读
- mysql - MYSQL:如何获得数量总和的最大值?
- android - PendingIntent.getBroadcast() 在 Android 11 中不起作用
- python - 如何将随机数添加到数组的每个值
- appium - 潜在不安全功能“adb shell”尚未启用
- python - Django 如何正确比较 django.utils.timezone.localtime 和 PostgreSQL 时间与时区?
- javascript - Oracle Apex 在交互式报告中打开列链接?
- python - 从 div 容器中查找 Xpath
- xamarin.android - Android:无法与 Azure 服务总线主题建立连接
- mysql - MySQL EER图中的关系
- android - 由于 AndroidManifest.xml 无法构建应用程序