Python: я работаю над калькулятором чаевых в ресторане, пытаюсь интегрировать переключатели

#python #tkinter #radio-button

#python #tkinter #переключатель

Вопрос:

Мне нужно знать, как реализовать выбранный переключатель в моих расчетах. Спасибо за любую помощь! Я действительно не уверен, в чем проблема, мой единственный квест действительно связан с частью «выбора определения». Я просто не знаю, что там делать

 from Tkinter import *

class App(Tk):
    def __init__(self):
        Tk.__init__(self)

        self.headerFont = ("Times", "16", "italic")
         self.title("Restaurant Tipper")
        self.addOrigBill()
        self.addChooseOne()
        self.addPercTip()
        self.addRateTip()
        self.addOutput()

    def addOrigBill(self):
        Label(self, text = "Bill Amount",
            font = self.headerFont).grid(columnspan = 1)
        self.txtBillAmount = Entry(self)
        self.txtBillAmount.grid(row = 1, column = 1)
        self.txtBillAmount.insert(0,"100.00")

    def addChooseOne(self):
        Label(self, text = "Pick ONE! Choose your % of Tip or Rate your experience",
            font = self.headerFont).grid(row = 2, column = 1)

    def addPercTip(self):
        Label(self, text = "% of Tip", 
            font = self.headerFont).grid(row = 3, column = 0)

        self.radPercTip1 = Radiobutton(self, text = "15%", 
            variable = self.percVar, value = .15, command = self.selected)
        self.radPercTip2 = Radiobutton(self, text = "17%", 
            variable = self.percVar, value = .17, command = self.selected)
        self.radPercTip3 = Radiobutton(self, text = "20%", 
            variable = self.percVar, value = .20, command = self.selected)

        self.radPercTip1.grid(row = 4, column = 0)
        self.radPercTip2.grid(row = 5, column = 0)
        self.radPercTip3.grid(row = 6, column = 0)

    def selected(self):
        float(self.percVar.get())

    def addRateTip(self):
        Label(self, text = "Tip by rating").grid(row = 3, column = 3)
        Label(self, text = "1 being the worst").grid(row = 4, column = 3)
        Label(self, text = "10 being the best").grid(row = 5, column = 3)
        Label(self, text = "Experience").grid(row = 6, column = 2)

        self.txtExperience = Entry(self)
        self.txtExperience.grid(row = 6, column = 3)

    def addOutput(self):
        self.btnCalc = Button(self, text = "Calculate Tip")
        self.btnCalc.grid(row = 7, columnspan = 2)
        self.btnCalc["command"] = self.calculate

        Label(self, text = "Tip").grid(row = 8, column = 1)
        self.lblTip = Label(self, bg = "#ffffff", anchor = "w", relief = "ridge")
        self.lblTip.grid(row = 8, column = 2, sticky = "we")

        Label(self, text = "Total Bill").grid(row = 9, column = 1)
        self.lblTotalBill = Label(self, bg = "#ffffff", anchor = "w", relief = "ridge")
        self.lblTotalBill.grid(row = 9, column = 2, sticky = "we")


    def calculate(self):
        bill = float(self.txtBillAmount.get())
        percTip = self.percVar
        rateTip = int(self.addRateTip.get())

        tip = bill * percTip
        self.lblTip["text"] = "%.2f" % tip

        totalBill = tip   bill
        self.lblTotalBill["text"] = "%.2f" % totalBill

        if rateTip <= 2:
            percTip = .10

        elif 3 <= rateTip <= 4:
            percTip = .12

        elif 5 <= rateTip <= 6:
            percTip = .15

        elif 7 <= rateTip <= 8:
            percTip = .17

        elif 9 <= rateTip <= 10:
            percTip = .20

        else:
            self.lblTotalBill["text"] = "Something is wrong"
def main():
    app = App()
    app.mainloop()

if __name__ == "__main__":
    main()
  

Комментарии:

1. В чем именно ваша проблема?

2. Я всегда получаю сообщение об ошибке при запуске программы, оно сообщает мне, что оно поступает откуда-то из раздела addPercTip. Я просто не могу найти, откуда именно.

3. Он говорит вам, что он приходит «откуда-то»? Или он точно сообщает вам, откуда он взялся? Пожалуйста, покажите полную обратную трассировку. Он почти всегда сообщает вам точную строку с ошибкой.

Ответ №1:

self.percVar В вашем коде их нет. Как сказал @wastl, вам нужно его инициализировать.

Для этого вам нужно использовать один из классов переменных. Поскольку вы используете float type, DoubleVar() это было бы лучше всего.

 def addPercTip(self):
    self.percVar = DoubleVar()  #this line should be added in your method
    Label(self, text = "% of Tip", 
        font = self.headerFont).grid(row = 3, column = 0)

def selected(self):
    print (type(self.percVar.get())) 
    #which is float, without converting explicitly because of DoubleVar()
    print (self.percVar.get())
    #this will print what you click
  

Ответ №2:

Вы забыли инициализировать self.percVar переменную

Добавить self.percVar = 0 в качестве первой строки addPercTip метода. Это должно исправить вашу ошибку.

КСТАТИ: для будущих вопросов лучше всего включить сообщение об ошибке, которое вы получаете, и ТОЧНО описать, какая часть программы вызывает у вас какие проблемы