tkinter中的输入窗口未删除

时间:2016-01-12 13:17:26

标签: python tkinter tkinter-entry

我正在使用此代码来计算gcode文件中的某些值。在按钮gcode文件加载中找到一个卷值,然后找到质量和价格。我希望一个人能够使用输入函数输入这些变量,但是首先还有一些默认值。我的问题是,输入窗口不会清除并接受其他值,只有默认值存在。我正在使用entry.delete(0,END),但它无法正常工作。

这是代码:

    def delete_entry(self):
        e.delete(0, END)
        return None

#    def Statusbar(self):
#         self.stat1.set("Waiting for the file... ")

    #Creation of init_window
    def init_window(self):

        # changing the title of our master widget      
        self.master.title("Filament Data")

        # allowing the widget to take the full space of the root window
        self.pack(fill=BOTH, expand=1)

        # creating a menu instance
        menu = Menu(self.master)
        self.master.config(menu=menu)

        # create the file object)
        file = Menu(menu)
        help = Menu(menu)

        # adds a command to the menu option, calling it exit, and the command it runs on event is client_exit
        file.add_command(label="Exit", command=self.client_exit)
        help.add_command(label="About", command=self.about_popup)

        #added "file" to our menu
        menu.add_cascade(label="File", menu=file)
        menu.add_cascade(label="Help", menu=help)


        #Creating the  intro label
        l_instruction = Label(self, justify=CENTER, compound=TOP, text="Enter density and price per \n gram of your material and then \n load GCODE file to find volume, \n weight and price of used filament.")
        l_instruction.grid(columnspan=2, ipady=10)


        #Creating the button
        gcodeButton = Button(self, text="Load GCODE", command=self.read_gcode)
        gcodeButton.grid(row=3, columnspan=2, ipady=10)

        #Entry fields for density and price per gram
        e = Entry(self, justify=CENTER, width=5)
#        e.delete(0, END)
        e.insert(0, "1.13")
        e.grid(row=1, column=0)
        e.bind("<Button-1>", self.delete_entry)
        self.density = float(e.get())


        e_label = Label(self, text="D")
        e_label.grid(row=2, column=0)

        e1 = Entry(self, justify=CENTER, width=5)
#        e1.delete(0, END)
        e1.insert(0, "0.175")
        e1.grid(row=1, column=1)
        self.price = float(e1.get())

        e1_label = Label(self, text="$")
        e1_label.grid(row=2, column=1)

1 个答案:

答案 0 :(得分:1)

当您调用delete方法时,它会立即删除窗口小部件中的任何内容。在您的情况下,当您无需删除任何内容时,您将在创建窗口小部件后立即调用它。

如果您希望在用户点击它时删除条目小部件中的文本,则需要定义删除内容的绑定。

要创建绑定,请调用窗口小部件的bind方法,并告诉它要绑定的事件和要调用的函数。例如,如果要调用函数delete_entry,可以这样做:

def delete_entry(event):
    event.widget.delete(0, "end")

e = Entry(...)
e.bind("<1>", delete_entry)

将函数绑定到事件时,将使用参数调用该函数 - 该参数表示事件。对象的一个​​属性是widget,它是对拥有该事件的小部件的引用。您可以使用此引用与窗口小部件进行交互。