Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2012 22:04:33

ywaw
Зарегистрирован: 2012-10-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

Имеется форма сделанная в Tkinter.
Как вызвать вызвать из нее по нажатию кнопки модальное окно?
К примеру MessageBox c кнопками Ok Cantel

Офлайн

#2 Окт. 24, 2012 22:21:07

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

По нажатию какой кнопки? Напиши полностью задачу? Может это быстрые клавиши, или кнопка мыши?? Вопрос поставлен некорректно… Ответ дать не могу…



Офлайн

#3 Окт. 25, 2012 10:21:10

ywaw
Зарегистрирован: 2012-10-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

Не принципиально по какому событию. Это может быть нажатие кнопки на форме,
к примеру “About” или нажатие комбинации клавиш. Мне просто нужно по этому
событию вызвать модальное окно с сообщением.

Офлайн

#4 Окт. 25, 2012 16:08:14

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

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



Отредактировано sp3 (Окт. 25, 2012 16:08:57)

Офлайн

#5 Окт. 26, 2012 06:07:38

ywaw
Зарегистрирован: 2012-10-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

Это то что нужно. Спасибо.

Офлайн

#6 Сен. 10, 2014 21:11:39

Ryoga
Зарегистрирован: 2014-02-01
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

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

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

Офлайн

#7 Сен. 10, 2014 21:56:31

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter - модальное окно

wait_window() нужен не для этого Можете смело убирать…
и focus_set не всегда будет срабатывать. Лучше использовать focus_force()

Это не совсем корректно, так как новое окно фокус все равно теряет

Отредактировано 4kpt_II (Сен. 10, 2014 22:02:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version