messagebox tkinter的问题[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

基本上我的问题是与self.asses_val按钮小部件。按钮正在自动按下。我有一个try / except语句来防止它崩溃。

为什么在将任何值输入Entry小部件之前,消息框会自动运行?

如果我没有try / except语句,我会收到此错误:

val = float(self.property_value_entry.get()) ValueError: could not convert string to float:

我正在解释这个,因为条目小部件中的值没有机会获得数字输入并最终返回空白的“”字符串输入,因为没有输入任何内容!到底是怎么回事?

import tkinter
import tkinter.messagebox


class taxGUI:
    def __init__(self):
        self.main_window = tkinter.Tk()

        # initialize frames
        self.top_frame = tkinter.Frame(self.main_window)
        self.mid_frame = tkinter.Frame(self.main_window)

        # top frame widgets
        self.property_value = tkinter.Label(self.top_frame, text='Enter Property Value')
        self.property_value_entry = tkinter.Entry(self.top_frame, width=10)

        # pack top_frame widgets
        self.property_value.pack(side='left')
        self.property_value_entry.pack(side='right')

        # mid frame widgets
        self.asses_val = tkinter.Button(self.mid_frame, text='Assesment Value', command=self.getAssessment())
        self.tax_val = tkinter.Button(self.mid_frame, text='Tax Value')
        self.quit = tkinter.Button(self.mid_frame, text='Quit', command=self.main_window.destroy)

        # pack mid frame widgets
        self.asses_val.pack(side='left')
        self.tax_val.pack(side='left')
        self.quit.pack(side='right')

        # pack frames
        self.top_frame.pack()
        self.mid_frame.pack()


        tkinter.mainloop()

    def getAssessment(self):
        try:
            val = float(self.property_value_entry.get())
        except ValueError:
            val = 0.00
        assessment = val * 0.60
        tkinter.messagebox.showinfo('The property value is assessed at ' + str(assessment) + ' dollars.')

    def getTaxes(self):
        val = float(self.property_value_entry.get())
        tax = val * 0.75
        tkinter.messagebox.showinfo('The tax on this property is ' + str(tax) + ' dollars.')


# instantiate GUI
t = taxGUI()
python tkinter tkinter-entry
1个回答
1
投票

self.asses_val内的第22行,将command=self.getAssessment()更改为command=self.getAssessment,它将起作用。

代码将变为:

import tkinter
import tkinter.messagebox


class taxGUI:
    def __init__(self):
        self.main_window = tkinter.Tk()

        # initialize frames
        self.top_frame = tkinter.Frame(self.main_window)
        self.mid_frame = tkinter.Frame(self.main_window)

        # top frame widgets
        self.property_value = tkinter.Label(self.top_frame, text='Enter Property Value')
        self.property_value_entry = tkinter.Entry(self.top_frame, width=10)

        # pack top_frame widgets
        self.property_value.pack(side='left')
        self.property_value_entry.pack(side='right')

        # mid frame widgets
        self.asses_val = tkinter.Button(self.mid_frame, text='Assesment Value', command=self.getAssessment)
        # _______________________________________________________________________________________________^
        self.tax_val = tkinter.Button(self.mid_frame, text='Tax Value', command=self.getTaxes)
        self.quit = tkinter.Button(self.mid_frame, text='Quit', command=self.main_window.destroy)

        # pack mid frame widgets
        self.asses_val.pack(side='left')
        self.tax_val.pack(side='left')
        self.quit.pack(side='right')

        # pack frames
        self.top_frame.pack()
        self.mid_frame.pack()


        tkinter.mainloop()

    def getTaxes(self):
        val = float(self.property_value_entry.get())
        tax = val * 0.75
        tkinter.messagebox.showinfo('The tax on this property is ' + str(tax) + ' dollars.')

    def getAssessment(self):
        val = float(self.property_value_entry.get())
        assessment = val * 0.60
        tkinter.messagebox.showinfo('The property value is assessed at ' + str(assessment) + ' dollars.')


# instantiate GUI
t = taxGUI()
© www.soinside.com 2019 - 2024. All rights reserved.