首页 > 解决方案 > 当用户单击 tkinter 中的错误消息框时聚焦空输入框

问题描述

在 tkinter GUI 中,我创建了一个“注册帐户”窗口。如果用户在一个或多个条目(在条目框中)未填写的情况下单击注册按钮,则会出现一个错误消息框。我想要的是,当用户单击 tkinter 错误消息框的“确定”按钮时,光标应该移动到那个特定的空输入框,从而指示用户哪个输入框是空的。

from tkinter import *
import tkinter.messagebox

class MyGUI:
def __init__(self):
    self.root = Tk()

    self.entrybox = []

    for i in range(9): #Creating 9 Entry Boxes
        self.entrybox.append(Entry(self.root, width = 10, font = 'Verdana 10'))

    for i in self.entrybox: #packing each Entry Box      
        i.pack(pady = 5)

    okButton = Button(self.root, text = 'OK', command = self.get_entryvalues)
    okButton.pack()

    mainloop()

def get_entryvalues(self):
    values = []
    for i in self.entrybox:
        values.append(i.get())
    if '' in values:
        tkinter.messagebox.showerror('Error', '1 or more entries are not filled!', parent = self.root)
    else:
        tkinter.messagebox.showinfo('Info', 'Form submitted', parent = self.root)


mygui = MyGUI()

标签: pythontkinter

解决方案


您可以调用focus()在 for 循环内部get_entryvalues()函数中找到的第一个空条目:

from tkinter import *
import tkinter.messagebox

class MyGUI:
    def __init__(self):
        self.root = Tk()

        self.entrybox = []
        for i in range(9): #Creating 9 Entry Boxes
            btn = Entry(self.root, width=10, font='Verdana 10')
            btn.pack(pady=5)
            btn.bind('<Return>', self.next_entry)
            self.entrybox.append(btn)

        okButton = Button(self.root, text='OK', command=self.get_entryvalues)
        okButton.pack()

        self.root.mainloop()

    def get_entryvalues(self):
        for e in self.entrybox:
            if e.get().strip() == '':
                tkinter.messagebox.showerror('Error', '1 or more entries are not filled!', parent=self.root)
                e.focus() # focus the empty entry
                return
        tkinter.messagebox.showinfo('Info', 'Form submitted', parent=self.root)

    def next_entry(self, event):
        event.widget.tk_focusNext().focus()

mygui = MyGUI()

推荐阅读