проблема с tkinter messagebox

#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 .