В контексте программирования графического пользовательского интерфейса обычно в одном окне приложения имеется несколько страниц. Каждая страница может содержать различные виджеты, такие как поля ввода, кнопки или метки. При взаимодействии с этими виджетами пользователь вводит данные или делает выбор, который необходимо использовать на разных страницах. Это поднимает вопрос о том, как получить доступ к переменным данным из одного класса в другой, особенно если эти классы представляют разные страницы.
Один эффективный подход включает в себя использование концепции класса контроллера. . В предоставленном фрагменте кода у вас есть класс MyApp, который управляет несколькими страницами, например PageOne и PageTwo. Обычно контроллер выступает в качестве посредника между различными частями приложения и облегчает взаимодействие. Вот как вы можете использовать контроллер для получения переменных данных:
Добавьте ссылку на контроллер в каждом классе страницы:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
Создайте метод в контроллере, чтобы получить экземпляр страницы по имени ее класса:
class MyApp(Tk):
def get_page(self, classname):
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
Доступ к общедоступным членам целевой страницы с другой страницы:
class PageTwo(ttk.Frame):
def print_it(self):
page_one = self.controller.get_page("PageOne")
value = page_one.some_entry.get()
В качестве альтернативы вы можете рассмотреть возможность хранения общих данных в самом контроллере, а не на странице занятия. Этот подход отделяет страницы друг от друга и снижает необходимость жесткой связи между ними. Вот как это можно реализовать:
Создайте структуру данных в контроллере для хранения всех общих данных:
class MyApp(Tk):
def __init__(self):
self.app_data = {"name": StringVar(),
"address": StringVar()}
Измените каждую страницу, чтобы она ссылалась на структуру данных контроллера при создании виджетов:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
Доступ к общим данным из контроллера вместо классов страниц :
class PageTwo(ttk.Frame):
def print_it(self):
value = self.controller.app_data["address"].get()
Реализуя один из этих подходов, вы можете эффективно распределять переменные данные между различными классами страниц в приложении с графическим интерфейсом. Подход на основе контроллера обеспечивает тесную связь и централизованную точку управления связью, а хранение данных в контроллере способствует развязке и гибкости. Выбор подхода зависит от конкретных требований вашего приложения и уровня взаимодействия и обмена данными, необходимого между страницами.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3