Как вернуть переменную из функции, которая вызывается при нажатии кнопки?

У меня есть простое приложение tkinter. Я хочу создать всплывающее окно, которое позволяет пользователю вставлять свою группу. После записи и нажатия кнопки ввода значение проверяется, и если оно приемлемо, я хотел бы его сохранить. Значение group берется в функции save_and_kil, которая "вызывается" при нажатии кнопки. Я указываю команду для вызова в аргументах кнопки, так как я могу сохранить значение групп, чтобы я мог получить к нему доступ в other_function?

import tkinter as tk


class SomeClass:
    def __init__(self, root):
        self.root = root
        self.root.title("App")
        self.root.geometry("600x450")
        self.groups = ["1", "2", "3", "4", "5"]
        self.top_window()
        self.group = "nothing"


    def top_window(self):
        a = tk.Toplevel()
        a.geometry('400x150')
        a.title('Credentials Window')

        def save_and_kil():
            group = txt_entry.get()
            if group in self.groups:
                a.destroy()

        txt_label = tk.Label(a, text="please write your group")
        txt_entry = tk.Entry(a)
        enter_but = tk.Button(a,
                              text='Enter',
                              command=save_and_kil)
        txt_label.grid(column=0, row=0)
        txt_entry.grid(column=1, row=0)
        enter_but.grid(column=1, row=1)
        # somehow make redefine the value of self.group

       def other_function(self):
           print(self.group)
           pass


roott = tk.Tk()
app = SomeClass(roott)
roott.mainloop()

self.group = group?
Barmar 23.04.2022 00:53
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
1
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Редактировать Добавляем код примера:

import tkinter as tk


class SomeClass:
    def __init__(self, root):
        self.root = root
        self.root.title("App")
        self.root.geometry("600x450")
        self.groups = ["1", "2", "3", "4", "5"]
        self.top_window()
        self.group = "nothing"

    def save_and_kil(self):
        self.group = self.txt_entry.get()
        
        if self.group in self.groups:
            self.a.destroy()
            
        self.other_function()

    def other_function(self):
       print(f'self.group: {self.group}')
       pass

    def top_window(self):
        self.a = tk.Toplevel()
        self.a.geometry('400x150')
        self.a.title('Credentials Window')

        self.txt_label = tk.Label(self.a, text="please write your group")
        self.txt_entry = tk.Entry(self.a)
        self.enter_but = tk.Button(self.a,
                              text='Enter',
                              command=self.save_and_kil)
        self.txt_label.grid(column=0, row=0)
        self.txt_entry.grid(column=1, row=0)
        self.enter_but.grid(column=1, row=1)
        # somehow make redefine the value of self.group


roott = tk.Tk()
app = SomeClass(roott)
roott.mainloop()

Вы можете установить запись непосредственно на self.group или иметь self.temp_group, который вы сохраните в save_and_kil и используете позже в other_function

Я не понимаю, что вы имеете в виду. Не могли бы вы проверить одну из своих теорий, а затем, если она сработает, опубликовать код?

serax 23.04.2022 01:01

Просто добавил ответ. По сути, вы можете контролировать каждый элемент, который является частью одного и того же класса, и использовать его как атрибут.

Rodrigo Cava 23.04.2022 01:36
Ответ принят как подходящий

save_and_kill закрывает self, поэтому вы можете установить self.group внутри функции.

    def save_and_kil():
        self.group = txt_entry.get()
        if self.group in self.groups:
            a.destroy()

Другие вопросы по теме