Найти - Пользователи
Полная версия: Tkinter - модальное окно
Начало » GUI » Tkinter - модальное окно
1
ywaw
Имеется форма сделанная в Tkinter.
Как вызвать вызвать из нее по нажатию кнопки модальное окно?
К примеру MessageBox c кнопками Ok Cantel
4kpt
По нажатию какой кнопки? Напиши полностью задачу? Может это быстрые клавиши, или кнопка мыши?? Вопрос поставлен некорректно… Ответ дать не могу…
ywaw
Не принципиально по какому событию. Это может быть нажатие кнопки на форме,
к примеру “About” или нажатие комбинации клавиш. Мне просто нужно по этому
событию вызвать модальное окно с сообщением.
sp3
import Tkinter
import tkMessageBox
 
 
def buttonCallback():
    result= tkMessageBox.askokcancel('title', 'message')
    label['text'] = str(result)
 
 
root = Tkinter.Tk()
button = Tkinter.Button(root,
                    text = "button",
                    command = buttonCallback )  
label = Tkinter.Label(root, text = "None")  
 
button.pack()
label.pack()
 
root.mainloop()

В доках есть все что нужно
http://infohost.nmt.edu/tcc/help/pubs/tkinter.pdf
ywaw
Это то что нужно. Спасибо.
Ryoga
Встала аналогичная задача (открытия модального окна, причем, не из состава стандартных диалоговых окон Ткинтера), решения в лоб не нашел, полез гуглить. Результат решил выложить - вдруг кому понадобится в будущем.

from Tkinter import Tk, Toplevel, Button
def openModal():
    slave = Toplevel(root)
    slave.grab_set()
    slave.focus_set()
    slave.wait_window()
root = Tk()
Button(root, text = 'openModal', command = openModal).pack()
root.mainloop()

Вся суть в трех методах:
Toplevel.grab_set() - не дает возвращаться к родительскому окну, пока не закрыто дочернее
Toplevel.focus_set() - переводит фокус на это самое дочернее окно, чтобы по нему не кликать лишний раз
Toplevel.wait_window() - по идее, должен самостоятельно делать окно модальным, но методом научного тыка, похоже, он в этой троице не делает ничего
В целом - работает.
4kpt_II
wait_window() нужен не для этого Можете смело убирать…
и focus_set не всегда будет срабатывать. Лучше использовать focus_force()

Это не совсем корректно, так как новое окно фокус все равно теряет
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB