«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обмениваться переменными данными между разными страницами приложения с графическим интерфейсом?

Как обмениваться переменными данными между разными страницами приложения с графическим интерфейсом?

Опубликовано 6 ноября 2024 г.
Просматривать:168

How to Share Variable Data Between Different Pages in a GUI Application?

Как получить переменные данные из класса

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

Использование вашего контроллера

Один эффективный подход включает в себя использование концепции класса контроллера. . В предоставленном фрагменте кода у вас есть класс MyApp, который управляет несколькими страницами, например PageOne и PageTwo. Обычно контроллер выступает в качестве посредника между различными частями приложения и облегчает взаимодействие. Вот как вы можете использовать контроллер для получения переменных данных:

  1. Добавьте ссылку на контроллер в каждом классе страницы:

    class PageOne(ttk.Frame):
        def __init__(self, parent, controller):
            self.controller = controller
  2. Создайте метод в контроллере, чтобы получить экземпляр страницы по имени ее класса:

    class MyApp(Tk):
        def get_page(self, classname):
            for page in self.frames.values():
                if str(page.__class__.__name__) == classname:
                    return page
  3. Доступ к общедоступным членам целевой страницы с другой страницы:

    class PageTwo(ttk.Frame):
        def print_it(self):
            page_one = self.controller.get_page("PageOne")
            value = page_one.some_entry.get()

Хранение данных в контроллере

В качестве альтернативы вы можете рассмотреть возможность хранения общих данных в самом контроллере, а не на странице занятия. Этот подход отделяет страницы друг от друга и снижает необходимость жесткой связи между ними. Вот как это можно реализовать:

  1. Создайте структуру данных в контроллере для хранения всех общих данных:

    class MyApp(Tk):
        def __init__(self):
            self.app_data = {"name": StringVar(),
                             "address": StringVar()}
  2. Измените каждую страницу, чтобы она ссылалась на структуру данных контроллера при создании виджетов:

    class PageOne(ttk.Frame):
        def __init__(self, parent, controller):
            self.controller = controller
            self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
  3. Доступ к общим данным из контроллера вместо классов страниц :

    class PageTwo(ttk.Frame):
        def print_it(self):
            value = self.controller.app_data["address"].get()

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3