Я создаю очень маленькое диалоговое окно для выбора языка для моего приложения. Затем, закрыв его, я обнаружил, что моя переменная "результат" в диалоговом окне исчезла.
Вот фрагмент:
Код: Выделить всё
import tkinter as tk
from tkinter.simpledialog import Dialog
from tkinter import ttk, LEFT, ACTIVE
from tkinter.ttk import Button, Frame
class LanguageDialog(Dialog):
lang_dict = {
'italiano': 'it',
'español': 'es',
'english': 'en',
'galego': 'gl',
}
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.selected_language = tk.StringVar()
self.result = 'en' # default value
def _on_cmb_change(self, event):
"""
Keeps updated the result variable with the code I want in the end
"""
print(self.lang_dict[self.selected_language.get()])
self.result = self.lang_dict[self.selected_language.get()]
def body(self, master):
self.selected_language = tk.StringVar()
ops = tuple(self.lang_dict.keys())
cmb_lang = ttk.Combobox(self, values=ops, state='readonly',
textvariable=self.selected_language)
cmb_lang.pack(side=tk.TOP)
cmb_lang.bind('', self._on_cmb_change)
def buttonbox(self):
"""add standard button box.
override if you do not want the standard buttons
"""
box = Frame(self)
w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
w.pack(side=LEFT, padx=5, pady=5)
self.bind("", self.ok)
box.pack()
if __name__ == '__main__':
root = tk.Tk()
d = LanguageDialog(root)
print(f'After the dialog, {d.result}')
root.mainloop()
Код: Выделить всё
self.result = 'en'
Я поискал в Интернете похожие примеры и нашел что они используют диалог таким же образом, например, здесь
Подробнее здесь: https://stackoverflow.com/questions/727 ... info-in-it