首页 > 解决方案 > 我的 GUI 程序代码通过单击提交按钮显示结果有什么问题吗?

问题描述

import tkinter

class longdis:
    def __init__(self):
        self.main = tkinter.Tk()
        self.top = tkinter.Frame(self.main)
        self.mid = tkinter.Frame(self.main)
        self.mid1 = tkinter.Frame(self.main)
        self.bot = tkinter.Frame(self.main)

        self.top.pack()
        self.mid.pack()
        self.mid1.pack()
        self.bot.pack()

        self.radiov = tkinter.IntVar()
        self.radiov.set(1)

        self.radio1 = tkinter.Radiobutton(self.mid, text = 'Daytime (6:00 a.m. through 5:59 p.m.)', variable = self.radiov, value = 0.07)
        self.radio2 = tkinter.Radiobutton(self.mid, text = 'Evening (6:00 p.m. through 11:59 p.m.)', variable = self.radiov, value = 0.12)
        self.radio3 = tkinter.Radiobutton(self.mid, text = 'Off-Peak (midnight through 5:59 a.m.)', variable = self.radiov, value = 0.05)

        self.radio1.pack()
        self.radio2.pack()
        self.radio3.pack()

        self.title = tkinter.Label(self.top, text ='Rate Catergory')
        self.title2 = tkinter.Label(self.top, text ='Rate Per Minute')

        self.value = tkinter.StringVar()

        self.label1 = tkinter.Label(self.mid1, textvariable = self.value)
        self.label1.pack()
        

        self.title.pack(side = 'left')
        self.title2.pack(side ='left')

        self.enter = tkinter.Entry(self.mid1, text = 'please enter how many minutes: ', width = 2)
        self.enter.pack()

        self.submit = tkinter.Button(self.bot, text ='submit', command = self.cbfunction )
        self.quit = tkinter.Button(self.bot, text = 'close', command = self.main.destroy)
        self.submit.pack(side = 'left')
        self.quit.pack(side = 'left')

    def cbfunction(self):
        t = float(self.enter.get())
        s = float(self.radiov.get())
        result = t*s
        self.value.set(result)
        

        
    
g = longdis()       

预期结果: 在此处输入图像描述

意想不到的结果: 在此处输入图像描述

问题(每分钟的费用): 在此处输入图像描述

正如您在上面看到的我的代码和图像,我使用提交按钮获得结果的 0。我不知道发生了什么,我的代码有什么问题,谁能帮助我?我将不胜感激。

标签: python

解决方案


有一些变化,看评论。也self.radiov应该提供整数值而不是浮动的...variable = self.radiov, value = 0.7

import tkinter

class longdis:
    def __init__(self):
        self.main = tkinter.Tk()
        self.top = tkinter.Frame(self.main)
        self.mid = tkinter.Frame(self.main)
        self.mid1 = tkinter.Frame(self.main)
        self.bot = tkinter.Frame(self.main)

        self.top.pack()
        self.mid.pack()
        self.mid1.pack()
        self.bot.pack()

        self.radiov = tkinter.IntVar()
        self.radiov.set(0) # initialize it to 0 i.e. fist radio button

        self.radio1 = tkinter.Radiobutton(self.mid, text = 'Daytime (6:00 a.m. through 5:59 p.m.)', variable = self.radiov, value = 0)
        self.radio2 = tkinter.Radiobutton(self.mid, text = 'Evening (6:00 p.m. through 11:59 p.m.)', variable = self.radiov, value = 1)
        self.radio3 = tkinter.Radiobutton(self.mid, text = 'Off-Peak (midnight through 5:59 a.m.)', variable = self.radiov, value = 2)

        self.radio1.pack()
        self.radio2.pack()
        self.radio3.pack()

        self.title = tkinter.Label(self.top, text ='Rate Catergory')
        self.title2 = tkinter.Label(self.top, text ='\tRate Per Minute')

        self.value = tkinter.StringVar()

        self.label1 = tkinter.Label(self.mid1, textvariable = self.value)
        self.label1.pack()
        

        self.title.pack(side = 'left')
        self.title2.pack(side ='left')

        self.enter = tkinter.Entry(self.mid1, width = 10)
        self.enterlabel = tkinter.Label(self.mid1, text = 'please enter how many minutes: ')
        self.enterlabel.pack(side ='left')
        self.enter.pack(side ='left')

        self.submit = tkinter.Button(self.bot, text = 'submit', command = self.calculate_result)
        self.submit.pack(side = 'left')
        
        self.quit = tkinter.Button(self.bot, text = 'close', command = self.main.destroy)
        self.quit.pack(side = 'right')
        
    def calculate_result(self): # handles the submit method
        button_index = self.radiov.get()
        # depending on radio button calculate result
        if(button_index == 0):
            self.cbfunction1()
        if(button_index == 1):
            self.cbfunction2()
        if(button_index == 2):
            self.cbfunction3()
        
    def cbfunction1(self):
        t = float(self.enter.get())
        s = 0.07
        result = t*s
        self.value.set(result)
    def cbfunction2(self):
        t = float(self.enter.get())
        s = 0.12
        result = t*s
        self.value.set(result)
    def cbfunction3(self):
        t = float(self.enter.get())
        s = 0.05
        result = t*s
        self.value.set(result)
        


g = longdis()
tkinter.mainloop()

推荐阅读