python - 当用户单击 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()
解决方案
您可以调用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()
推荐阅读
- excel - Power Query - 连接和转置
- c# - 使用 SmsManager 打开默认短信应用
- azure - azure blob 存储静态站点托管重定向到后端 Web 应用程序
- java - 使用命令停止 if 循环
- sql - Laravel 日期分组按日期和计数
- laravel - 使用 KCFinder 将图像上传到 CKEditor 时,文件上传期间发生 HTTP 错误(404:找不到文件)
- python - Add error bar to a single column in pandas plot
- xslt - xsl 2.0 基于不同元素的多重嵌套
- c# - mdf 文件连接无法正常工作
- php - PHP加密,加密时考虑空行