所以我用Tkinter创建了一个简单的输入窗口但是每当我有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行时,我可以输入Entry框,但是当它在那里我不能。
答案 0 :(得分:2)
tkinter messagebox默认对话框为modal。这意味着你需要什么 在返回父应用程序之前关闭子窗口(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()
答案 1 :(得分:1)
我为此所做的解决方案是覆盖 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
实际上,这就是我在编写测试时遇到的许多问题的处理方式。我覆盖了实用程序函数以添加日志记录或避免案例。