2015-04-29 31 views
0

所以我創建一個簡單的輸入窗口的Tkinter,但每當我有一個showinfo顯示我不能鍵入在輸入框中Tkinter的消息框導致進入禁用

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行時,我都可以輸入到輸入框中,但是當它出現時我不能。

回答

2

tkinter messagebox默認對話框是modal。這意味着你需要 來關閉子窗口(tkinter messagebox),然後才能返回到父應用程序。

所以,你的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() 
+0

我每次關閉信息框,但Entry被凍結,我添加了一些功能的按鈕,它在我關閉信息框後完美工作。我嘗試點擊'x'並確定,但沒有任何東西使輸入框功能。 –

+0

這可能是因爲您在啓動事件循環之前顯示tkMessageBox。嘗試使用回調,例如我編輯了包含的答案。 –

+0

所以我補充說,它的工作原理,但我觸發showinfo框在我的實際代碼中的if語句上彈出,我無法在按鈕按下時觸發它。我是否使用信息框錯誤,它不應該被稱爲像一個正常的「功能」,就像我需要從一個按鈕調用它來正常工作? –