#python #python-3.x #tkinter #tkmessagebox
#python #python-3.x #tkinter #tkmessagebox
Вопрос:
Я использую несколько tkinter messageboxes в своем коде. Но я заметил проблему с showinfo
ящиками сообщений, которые я использовал в своем коде. В принципе, я хочу, чтобы функция вызывалась при нажатии кнопки ok
on messagebox. Кроме того, пользователь может отказаться от продолжения, просто закрыв messagebox. Но, похоже, когда я нажимаю значок x, чтобы закрыть messagebox, функция все еще вызывается. Вот минимальный воспроизводимый код, объясняющий, что я имею в виду.
from tkinter import *
from tkinter import messagebox
root = Tk()
def func() :
Label(root,text="This is the text").pack()
msg = messagebox.showinfo("Loaded","Your saved state has been loaded")
if msg == "ok" :
func()
root.mainloop()
Мой вопрос в том, что я должен сделать, чтобы функция не вызывалась при нажатии значка x?
Комментарии:
1. На это нет ответа, но можно создать всплывающее окно пользователя для особых требований.
Ответ №1:
Существуют разные типы messagebox
, тот, который вы используете здесь, — это не то, что вы на самом деле должны использовать в вашем случае. То, что вы хотите, — это что-то называемое askyesno
или что-то с префиксом «спросить», потому что ваш код зависит от действий пользователя. Итак, вы хотите «спросить» пользователя, например:
from tkinter import *
from tkinter import messagebox
root = Tk()
def func() :
Label(root,text="This is the text").pack(oadx=10,pady=10)
msg = messagebox.askyesno("Loaded","Your saved state has been loaded")
if msg: #same as if msg == True:
func()
root.mainloop()
Здесь, askyesno
как и другие функции с префиксом «спросить», вернутся True
или 1
, если вы нажмете на кнопку «Да», иначе она вернет False
или 0
.
Также только то, что я понял сейчас showinfo
, как и другая функция messagebox с префиксом ‘show’, возвращает 'ok'
либо нажатие кнопки, либо закрытие окна.
Еще несколько сообщений с префиксом ‘ask’ ~ askokcancel
, askquestion
, askretrycancel
, askyesnocancel
. Посмотрите здесь
Комментарии:
1. Так это было именно то, что мне было нужно. Но просто из любопытства, есть ли какой-нибудь способ заставить значок x в
showinfo
messagebox просто закрыть окно??2. @Jovan Ну, у них
messagebox
ограниченная функциональность. Если вы хотите такую функцию, вам придется создать свою собственнуюmessagebox
.