Tkinter Messagebox 导致 Entry 被禁用
Tkinter Messagebox causing Entry to disable
所以我用 Tkinter 创建了一个简单的输入 window 但是每当我有一个 showinfo 显示时我无法在输入框中输入
import tkinter as tk
from tkinter import *
from tkinter.messagebox import *
root = tk.Tk()
root.title("hello world")
root.minsize(700,600)
abc = StringVar()
abc.set("abc")
Entry(root, bd = 1, width = 50, textvariable=abc).pack(side = TOP)
showinfo('info', 'hello')
root.mainloop()
我不确定我的 Python (3.4) 或 tkinter 是否有问题,但每当我取出 showinfo 行时,我都可以在输入框中输入,但当它出现时我不能.
tkinter messagebox 默认对话框是modal。这意味着你需要
在 return 到父应用程序之前关闭子 window(tkinter 消息框)。
因此,您的 python 或 tkinter 没有任何问题;此行为是有意的。
在事件循环开始之前不显示 tkinter 消息框。试试这个:
import tkinter as tk
from tkinter import *
from tkinter.messagebox import *
def callback():
showinfo("info", "hello")
root = tk.Tk()
root.title("hello world")
root.minsize(700,600)
abc = StringVar()
abc.set("abc")
Entry(root, bd=1, width=50, textvariable=abc).pack(side=TOP)
Button(root, text="OK", command=callback).pack()
root.mainloop()
我为此制定的解决方案覆盖了 messagebox.showerror 所以例如我制定了
import logging
from tkinter import messagebox
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(name)s "%(message)s"',
)
LOGGER = logging.getLogger(__name__)
def test_showerror(title, message):
LOGGER.debug(f'{title} Message -> {message}')
messagebox.showerror = test_showerror
实际上,这就是我处理在编写测试过程中遇到的许多问题的方式。我覆盖实用程序函数以添加日志记录或避免案例。
所以我用 Tkinter 创建了一个简单的输入 window 但是每当我有一个 showinfo 显示时我无法在输入框中输入
import tkinter as tk
from tkinter import *
from tkinter.messagebox import *
root = tk.Tk()
root.title("hello world")
root.minsize(700,600)
abc = StringVar()
abc.set("abc")
Entry(root, bd = 1, width = 50, textvariable=abc).pack(side = TOP)
showinfo('info', 'hello')
root.mainloop()
我不确定我的 Python (3.4) 或 tkinter 是否有问题,但每当我取出 showinfo 行时,我都可以在输入框中输入,但当它出现时我不能.
tkinter messagebox 默认对话框是modal。这意味着你需要 在 return 到父应用程序之前关闭子 window(tkinter 消息框)。
因此,您的 python 或 tkinter 没有任何问题;此行为是有意的。
在事件循环开始之前不显示 tkinter 消息框。试试这个:
import tkinter as tk
from tkinter import *
from tkinter.messagebox import *
def callback():
showinfo("info", "hello")
root = tk.Tk()
root.title("hello world")
root.minsize(700,600)
abc = StringVar()
abc.set("abc")
Entry(root, bd=1, width=50, textvariable=abc).pack(side=TOP)
Button(root, text="OK", command=callback).pack()
root.mainloop()
我为此制定的解决方案覆盖了 messagebox.showerror 所以例如我制定了
import logging
from tkinter import messagebox
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(name)s "%(message)s"',
)
LOGGER = logging.getLogger(__name__)
def test_showerror(title, message):
LOGGER.debug(f'{title} Message -> {message}')
messagebox.showerror = test_showerror
实际上,这就是我处理在编写测试过程中遇到的许多问题的方式。我覆盖实用程序函数以添加日志记录或避免案例。