简体   繁体   English

如何使用函数将变量分配给tkinter的输入框

[英]How to assign a variable to tkinter's entry box using a function

Here's an example of code before I explain my issue. 在我解释问题之前,这是一个代码示例。

from tkinter import *
from tkinter import messagebox


class Add:

    def __init__(self, master):
        self.frame = Frame(master)
        self.frame.grid()

        self.entry_1 = Entry(self.frame)
        self.entry_1.grid(row=0, column=0)

        self.entry_2 = Entry(self.frame)
        self.entry_2.grid(row=1, column=0)

        self.button = Button(self.frame, text='Submit', command=self.submit)
        self.button.grid(row=0, column=1)

    def submit(self):
        # Checks if both entries are digits.
        if self.entry_1.get().isdigit() is False:
            messagebox.showerror('Error', 'Invalid Character(s).')
        elif self.entry_2.get().isdigit() is False:
            messagebox.showerror('Error', 'Invalid Character(s).')

        add_entry_1_and_2 = int(self.entry_1.get()) + int(self.entry_2.get())
        print(add_entry_1_and_2)


root = Tk()
Add(root)
root.mainloop()

This code works great as long as I have a number assigned to both entry boxes, but if I leave one of the boxes empty and press the submit button it raises this error. 只要我为两个输入框分配了一个数字,此代码就可以很好地工作,但是如果我将其中一个输入框留空并按提交按钮,则会引发此错误。

ValueError: invalid literal for int() with base 10: ''

What I want is if one of the boxes is left empty I would like to assign that empty box to the value of 0. How could I achieve this? 我想要的是如果其中一个框保留为空,我想将该空框分配为0值。如何实现呢?

You could set a default value zero in each of the entry fields, and reset this value upon submitting. 您可以在每个输入字段中将默认值设置为零,并在提交时重置此值。
Then you could check the validity of an entry value in a try-except block, and proceed to adding the values only if they conform, otherwise, raise an exception that triggers the Error popup. 然后,您可以检查try-except块中条目值的有效性,并仅在它们符合时才继续添加值;否则,引发触发Error弹出窗口的异常。

something like this, maybe? 这样的事,也许吗?

from tkinter import *
from tkinter import messagebox


class Add:

    def __init__(self, master):
        self.frame = Frame(master)
        self.frame.grid()

        self.default_value = '0'
        self.entry_1 = Entry(self.frame)
        self.entry_1.grid(row=0, column=0)

        self.entry_2 = Entry(self.frame)
        self.entry_2.grid(row=1, column=0)

        self.button = Button(self.frame, text='Submit', command=self.submit)
        self.button.grid(row=0, column=1)

        self.reset_entry_defaults()

    def reset_entry_defaults(self):
        self.entry_1.delete(0,END)
        self.entry_2.delete(0,END)
        self.entry_1.insert(0, self.default_value)
        self.entry_2.insert(0, self.default_value)

    def submit(self):
        try:
            e1 = int(self.entry_1.get())   # <-- you may prefer to convert to float
            e2 = int(self.entry_2.get())   # <-- you may prefer to convert to float
        except ValueError:
            messagebox.showerror('Error', 'Invalid Character(s).')
        else:
            add_entry_1_and_2 = e1 + e2
            print(add_entry_1_and_2)
        self.reset_entry_defaults()


root = Tk()
Add(root)
root.mainloop()

Optionally, you could have your class Add inherit from tk.Frame (be a tk.Frame ), and do something like this: (可选)您可以让class Addtk.Frame (是tk.Frame )继承,并执行以下操作:

import tkinter as tk                   # <-- avoid star imports
from tkinter import messagebox


class Add(tk.Frame):                   # <-- inherit from tk.Frame

    def __init__(self, master):
        self.master = master
        super().__init__(self.master)  # <-- call the parent class

        self.default_value = '0'
        self.entry_1 = tk.Entry(self)
        self.entry_1.grid(row=0, column=0)

        self.entry_2 = tk.Entry(self)
        self.entry_2.grid(row=1, column=0)

        self.button = tk.Button(self, text='Submit', command=self.submit)
        self.button.grid(row=0, column=1)

        self.reset_entry_defaults()

    def reset_entry_defaults(self):
        self.entry_1.delete(0, tk.END)
        self.entry_2.delete(0, tk.END)
        self.entry_1.insert(0, self.default_value)
        self.entry_2.insert(0, self.default_value)

    def submit(self):
        try:
            e1 = int(self.entry_1.get())
            e2 = int(self.entry_2.get())
        except ValueError:
            tk.messagebox.showerror('Error', 'Invalid Character(s).')
        else:
            add_entry_1_and_2 = e1 + e2
            print(add_entry_1_and_2)
        self.reset_entry_defaults()


root = tk.Tk()
Add(root).grid()    # <-- call the tk geometry manager to place your frame in root
root.mainloop()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在tkinter中我如何将入口函数分配给变量 - In tkinter how do I assign the entry function to a variable 如何从 tkinter 输入框获取输入到另一个 function 中的变量? - How to get input from a tkinter entry box, to a variable in another function? 如何为python tkinter条目分配变量? - how to assign the variable for python tkinter entry? 在 Tkinter 输入框的实例名称中使用变量 - Using a Variable in the Instance Name of a Tkinter Entry Box 如何将输入输入框 (tkinter) 的文本分配给 python 脚本中的变量并通过按下按钮运行脚本? - How can I assign the text imputed into an entry box (tkinter) to variable in python script and run the script by pressing a button? 使用输入框设置变量的值并使用Tkinter将其显示在Label中 - Using an entry box to set a variable's value and display it in a Label using Tkinter 如何检查 Tkinter 中的空输入框并将值 0 分配给它? - How to check for an empty entry box in Tkinter and assign the value 0 to it? 如何检索条目和文本小部件的内容,并使用python将其分配给tkinter中的变量 - How to retrieve the contents of entry and text widget and assign it to a variable in tkinter using python 使用 tkinter 输入框中的变量来选择字典值 - Using a variable from a tkinter entry box to select a dictionary value 如何在Tkinter中禁用输入框? - How to disable Entry Box in Tkinter?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM