tkinter:调用消息框后无法输入
tkinter: No input possible after messagebox is called
我想在我的程序开始时调用消息框(messagebox.showwarning)来通知用户一些事情。
当用户单击“确定”时,将打开一个 GUI。用户可以在那里进行输入。
问题: 显示警告后无法输入。没有警告 window 输入工作没有任何问题。
是否有用户可以提供输入的解决方案?
我在这里包含了一个代码片段:
import tkinter as tk
from tkinter import *
from tkinter import messagebox
root = tk.Tk()
root.geometry('420x100')
# Input doesn't work after the messagebox
messagebox.showwarning("Warning", "Some Serious Warning.")
# Label
li = Label(root, text="Input 1")
li.grid(row=0, column=0)
li = Label(root, text="Input 2")
li.grid(row=0, column=2)
li = Label(root, text="Dropdown")
li.grid(row=1, column=0)
li = Label(root, text="Input 3")
li.grid(row=1, column=2)
# Input
url_text = StringVar()
e1 = Entry(root, textvariable=url_text)
e1.grid(row=0, column=1)
# Dropdown Menu
OptionList = [
"1",
"2",
"3"
]
input1 = StringVar()
input1.set(OptionList[0])
e3 = tk.OptionMenu(root, input1, *OptionList)
e3.config(width=12, font=('Helvetica', 9))
e3.grid(row=1, column=1)
input2 = StringVar()
e2 = Entry(root, textvariable=input2)
e2.grid(row=0, column=3)
input3 = StringVar()
e4 = Entry(root, textvariable=input3)
e4.grid(row=1, column=3)
# Button
b1 = Button(root, text="Run", width=12)
b1.grid(row=2, column=1)
b2 = Button(root, text="Help", width=12)
b2.grid(row=2, column=2)
b3 = Button(root, text="Exit", width=12)
b3.grid(row=2, column=3, pady=(10, 10))
root.mainloop()
您需要在显示消息框之前调用 root.wait_visibility()
或 root.update()
:
root.wait_visibility() # or root.update()
messagebox.showwarning("Warning", "Some Serious Warning.")
或者显示消息框后使用foucs_force()
获取焦点:
messagebox.showwarning("Warning", "Some Serious Warning.")
root.focus_force()
早些时候,当您同意消息框时,您的图形用户界面正在构建 window 由锁定您的标签的消息框创建。使用 class 方法修复了此问题,但需要手动关闭消息框创建的 window。
我建议不要使用消息框,而是创建一个标签或一个新的 window 作为错误框。
import tkinter as tk
from tkinter import *
from tkinter import messagebox
class app:
def __init__(self):
hi=messagebox.showwarning("Warning", "Some Serious Warning.")
self.window=tk.Tk()
self.window.geometry('420x100')
# Label
li = Label(self.window, text="Input 1")
li.grid(row=0, column=0)
li = Label(self.window, text="Input 2")
li.grid(row=0, column=2)
li = Label(self.window, text="Dropdown")
li.grid(row=1, column=0)
li = Label(self.window, text="Input 3")
li.grid(row=1, column=2)
# Input
url_text = StringVar()
e1 = Entry(self.window, textvariable=url_text)
e1.grid(row=0, column=1)
# Dropdown Menu
OptionList = [
"1",
"2",
"3"
]
input1 = StringVar()
input1.set(OptionList[0])
e3 = tk.OptionMenu(self.window, input1, *OptionList)
e3.config(width=12, font=('Helvetica', 9))
e3.grid(row=1, column=1)
input2 = StringVar()
e2 = Entry(self.window, textvariable=input2)
e2.grid(row=0, column=3)
input3 = StringVar()
e4 = Entry(self.window, textvariable=input3)
e4.grid(row=1, column=3)
# Button
b1 = Button(self.window, text="Run", width=12)
b1.grid(row=2, column=1)
b2 = Button(self.window, text="Help", width=12)
b2.grid(row=2, column=2)
b3 = Button(self.window, text="Exit", width=12)
b3.grid(row=2, column=3, pady=(10, 10))
game=app()
game.window.mainloop()
我想在我的程序开始时调用消息框(messagebox.showwarning)来通知用户一些事情。 当用户单击“确定”时,将打开一个 GUI。用户可以在那里进行输入。
问题: 显示警告后无法输入。没有警告 window 输入工作没有任何问题。
是否有用户可以提供输入的解决方案?
我在这里包含了一个代码片段:
import tkinter as tk
from tkinter import *
from tkinter import messagebox
root = tk.Tk()
root.geometry('420x100')
# Input doesn't work after the messagebox
messagebox.showwarning("Warning", "Some Serious Warning.")
# Label
li = Label(root, text="Input 1")
li.grid(row=0, column=0)
li = Label(root, text="Input 2")
li.grid(row=0, column=2)
li = Label(root, text="Dropdown")
li.grid(row=1, column=0)
li = Label(root, text="Input 3")
li.grid(row=1, column=2)
# Input
url_text = StringVar()
e1 = Entry(root, textvariable=url_text)
e1.grid(row=0, column=1)
# Dropdown Menu
OptionList = [
"1",
"2",
"3"
]
input1 = StringVar()
input1.set(OptionList[0])
e3 = tk.OptionMenu(root, input1, *OptionList)
e3.config(width=12, font=('Helvetica', 9))
e3.grid(row=1, column=1)
input2 = StringVar()
e2 = Entry(root, textvariable=input2)
e2.grid(row=0, column=3)
input3 = StringVar()
e4 = Entry(root, textvariable=input3)
e4.grid(row=1, column=3)
# Button
b1 = Button(root, text="Run", width=12)
b1.grid(row=2, column=1)
b2 = Button(root, text="Help", width=12)
b2.grid(row=2, column=2)
b3 = Button(root, text="Exit", width=12)
b3.grid(row=2, column=3, pady=(10, 10))
root.mainloop()
您需要在显示消息框之前调用 root.wait_visibility()
或 root.update()
:
root.wait_visibility() # or root.update()
messagebox.showwarning("Warning", "Some Serious Warning.")
或者显示消息框后使用foucs_force()
获取焦点:
messagebox.showwarning("Warning", "Some Serious Warning.")
root.focus_force()
早些时候,当您同意消息框时,您的图形用户界面正在构建 window 由锁定您的标签的消息框创建。使用 class 方法修复了此问题,但需要手动关闭消息框创建的 window。 我建议不要使用消息框,而是创建一个标签或一个新的 window 作为错误框。
import tkinter as tk
from tkinter import *
from tkinter import messagebox
class app:
def __init__(self):
hi=messagebox.showwarning("Warning", "Some Serious Warning.")
self.window=tk.Tk()
self.window.geometry('420x100')
# Label
li = Label(self.window, text="Input 1")
li.grid(row=0, column=0)
li = Label(self.window, text="Input 2")
li.grid(row=0, column=2)
li = Label(self.window, text="Dropdown")
li.grid(row=1, column=0)
li = Label(self.window, text="Input 3")
li.grid(row=1, column=2)
# Input
url_text = StringVar()
e1 = Entry(self.window, textvariable=url_text)
e1.grid(row=0, column=1)
# Dropdown Menu
OptionList = [
"1",
"2",
"3"
]
input1 = StringVar()
input1.set(OptionList[0])
e3 = tk.OptionMenu(self.window, input1, *OptionList)
e3.config(width=12, font=('Helvetica', 9))
e3.grid(row=1, column=1)
input2 = StringVar()
e2 = Entry(self.window, textvariable=input2)
e2.grid(row=0, column=3)
input3 = StringVar()
e4 = Entry(self.window, textvariable=input3)
e4.grid(row=1, column=3)
# Button
b1 = Button(self.window, text="Run", width=12)
b1.grid(row=2, column=1)
b2 = Button(self.window, text="Help", width=12)
b2.grid(row=2, column=2)
b3 = Button(self.window, text="Exit", width=12)
b3.grid(row=2, column=3, pady=(10, 10))
game=app()
game.window.mainloop()