Tkinter Messagebox导致Entry禁用

时间:2015-04-29 04:11:26

标签: python tkinter messagebox tkinter-entry

所以我用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框,但是当它在那里我不能。

2 个答案:

答案 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

实际上,这就是我在编写测试时遇到的许多问题的处理方式。我覆盖了实用程序函数以添加日志记录或避免案例。