Виджеты исчезают после tkMessageBox в Tkinter - PullRequest
0 голосов
/ 20 октября 2010

Каждый раз, когда я использую этот код в своих приложениях:

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 голос
/ 20 октября 2010

Хорошо, здесь есть несколько проблем.Во-первых, у вашего ярлыка нет строки или изображения, связанных с ним.Поэтому его ширина и высота будут очень маленькими.Поскольку вы используете пакет, содержащийся виджет (корневое окно) будет «сжиматься, чтобы поместиться» вокруг этого виджета и любых других виджетов, которые вы упаковываете в корневом окне.

Во-вторых, вы используете место для кнопки, что означаетРазмер не повлияет на размер родителя.Не только это, но вы помещаете кнопку внутри очень крошечной метки.Таким образом, единственное, что контролирует размер родительского элемента, - это метка, поэтому главное окно оказывается очень маленьким.

У вас есть еще одна проблема - вы показываете диалоговое окно перед входом в цикл обработки событий.Я немного удивлен, что это даже работает, но 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()
...