Я пишу приложение с использованием PyQt4 для анализа данных, полученных из нашего программного обеспечения для сбора данных. Приложение будет состоять из нескольких виджетов:Приложение PyQT - где хранить данные, которые затем обрабатываются другими виджетами?
- виджет для отображения файлов, которые были импортированы (и какие каналы данных находятся в этих файлах); этот виджет будет также содержать наблюдателя файлов, который ищет файлы данных по мере их создания
- виджет, который будет отображать определенные каналы данных при их ввозе
- несколько других виджетов, которые выполняют различный анализ и отображают результаты этого анализа
Все эти виджеты будут содержаться в QMainWindow
Так в основном, главная программа будет: созданный файл (внешние по отношению к приложению) -> файл импортируется в панд dataframe -> данные, представленные/проанализированы
Я не понимаю, где в приложении было бы лучшее место для фактической работы функции импорта (и, следовательно, там, где будут сохраняться фактические кадры данных pandas).
Два места, которые имеют для меня смысл, либо находятся в первом упомянутом виджете (том, который выполняет просмотр/отображение файла импортированного файла), либо самом самом QMainWindow.
Я понимаю, как сообщить всем виджетам, находящимся в настоящее время в QMainWindow, что файл был импортирован с использованием сигналов/слотов. Так, например, виджет хранителя файлов будет выдавать сигнал каждый раз, когда файл импортируется. Это будет связано с слотами в других виджетах, которые скажут им обновить текущий график или запустить какой-либо анализ или что-то еще.
Но точка неопределенности Я работаю над тем, как сделать импортированные данные доступными для всех виджетов, находящихся в настоящее время в QMainWindow. Это то, что я имею в виду, спросив, где действительно должна выполняться функция импорта.
Надеюсь, что я прошу ясно; если не дайте мне знать.
Edit:
Чтение немного больше о MVC дизайна в Qt, то неясно, мне ли это уместно. Я хотел бы сделать части приложения максимально независимыми, поэтому идея использования MVC очень привлекательна, но мне сложно понять, как это будет реализовано в моем случае. Все примеры, которые я смог найти, похоже, связаны с обновлением, например TreeWidget и ComboBox, так что, когда данные для одного редактируются, он остается синхронизированным с данными для другого (т. Е. Оба они меняются с тех пор данные хранятся в одном месте).
В моем случае сами данные никогда не изменяются ничем после его импорта. Анализ может выполняться на нем, но это будет независимым от каждого виджета и не повлияет на фактические исходные данные, которые были импортированы в приложение. Каждый виджет по существу независим, причем все, что происходит внутри этого виджета, не влияет на какой-либо другой виджет приложения.Каждый виджет, активный в основном приложении, просто должен иметь доступ к импортированным данным и должен знать, когда был добавлен новый кусок данных (это предполагается как словарь имен файлов, сопоставленных с файловыми кадрами pandas)
Как было предложено, данные хранятся в главном приложении и подключаются к каждому из виджетов, чтобы показать, что новая часть данных теперь доступна прямолинейно, поэтому я понимаю, как это будет работать.
Я просто очень не понимаю, что я получу, пройдя по маршруту MVC.
Спасибо. Я буду больше смотреть на идею дизайна MVC, так как это приложение, скорее всего, будет расти довольно быстро, как только я получу основные его аспекты. – user3014097
См. Edit в OP, так как комментарий является точкой разъяснения, которая слишком длинная для ввода здесь. – user3014097
@ user3014097 MVC - это всего лишь один из многих шаблонов проектирования, которые могут удовлетворить ваше приложение, так как он хорошо зарекомендовал себя для разделения пользовательских входов, логики и хранения данных. Похоже, вы немного смущены между шаблоном проектирования MVC (как в ссылке) и реализацией Qt представлений и моделей в некоторых своих виджетах; эти два не совсем то же самое (и последнее не так важно для моего ответа). Простой путь к попытке MVC будет следовать шаблону в ссылке и понимать минимальный поток процесса через программу. – 101