Tkinter中tkMessageBox后小部件消失
每次我在应用程序中使用这段代码时:
tkMessageBox.showinfo("Test", "Info goes here!")
一个消息框会弹出来(这本来就是应该的),但是当我点击“确定”后,这个框消失了,窗口里的大部分其他控件也跟着消失了。我该怎么做才能让其他控件不消失呢?
这是我的代码:
from Tkinter import *
import tkMessageBox
root = Tk()
root.minsize(600,600)
root.maxsize(600,600)
p1 = Label(root, bg='blue')
p1.place(width=600, height=600)
b1 = Button(p1, text="Test Button")
b1.place(x="30", y="50")
tkMessageBox.showinfo("Test", Info")
root.mainloop()
1 个回答
1
好的,这里有几个问题。首先,你的标签没有任何文字或图片,所以它的宽度和高度会非常小。因为你使用了pack布局,包含这个标签的窗口(根窗口)会“收缩到适合”这个标签和你在根窗口中放置的其他控件。
其次,你使用place布局来放置按钮,这意味着按钮的大小不会影响父窗口的大小。而且,你把按钮放在了那个非常小的标签里面。因此,唯一控制父窗口大小的就是这个标签,所以主窗口最后变得非常小。
还有一个问题是,你在进入事件循环之前就显示了对话框。我有点惊讶它居然能工作,但Tkinter有时候会在后台做一些奇怪的事情。你应该在调用对话框之前先进入事件循环。
试试这个修改过的代码作为起点:
from Tkinter import *
import tkMessageBox
def showInfo():
tkMessageBox.showinfo("Test","Info")
root = Tk()
p1 = Label(root, bg='blue', text="hello")
p1.pack()
b1 = Button(root, text="Test Button", command=showInfo)
b1.pack()
root.mainloop()