2 / 2 / 2
Регистрация: 19.10.2014
Сообщений: 56
PyQt5

Обмен данными между формами

13.03.2018, 21:13. Показов 3229. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Пишу небольшое приложение средствами PyQt, хотел посоветоваться, как лучше осуществлять обмен данными между формами. Каждой форме соответствует свой класс (форма1 - класс1). Есть форма1, в которой находятся поля для заполнения. По нажатию кнопки вызывается метод класса1, который перехватывает введенные данные. Дальше я вижу 3 пути:
1) Этот метод обрабатывает полученные данные. В итоге обработки получим несколько, условно говоря, переменных. И на данном этапе вопрос. Как обратиться к этим самым переменным из метода класса2, если они существуют только внутри метода класса1?
2) Этот метод запоминает введенные данные. Далее мы обращаемся к ним в классе2 и уже там обрабатываем. Здесь вопрос, возможно ли это и если да, то как лучше сделать?
3) Этот метод сразу передает введенные данные в класс2 и они там уже обрабатываются. Вопрос тот же, возможно ли это и если да, то как лучше сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2018, 21:13
Ответы с готовыми решениями:

Обмен данными между двух форм pyqt5
Поясните как передавать правильно данные из одной формы в другую? Задача такая, из главной формы получается передать текст во вторую (...

Двусторонний обмен данными без блокировки GUI
Здравствуйте, у меня следующая ситуция: есть GUI написанный с WX. По нажатию кнопки создается новый поток и запускается сторонний ехе...

Как передать значение между формами
Всем привет! Такой вопрос. Как мне передать значение введенное во втором окне в LineEdit, в главное окно в Label? from PyQt5 import...

4
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
13.03.2018, 21:31
Недавно что-то похожее обсуждалось Взаимодействие между окнами в PyQt5
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
14.03.2018, 13:30
Возможно всё.
Плясать надо от того, какой из ваших классов знает о другом. 1-й о втором или наоборот. Так, чтобы сразу и туда и сюда - не делать, это циклическая ссылка и зло.
1
2 / 2 / 2
Регистрация: 19.10.2014
Сообщений: 56
14.03.2018, 19:25  [ТС]
По логике, класс2 знает о классе1, так как перехватываться данные будут в классе1 для дальнейшего использования в классе2.

Добавлено через 58 секунд
По логике, класс2 знает о классе1, так как перехватываться данные будут в классе1 для дальнейшего использования в классе2.

Добавлено через 22 минуты
Я посмотрел код, приведенный axe77.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
import UI_MainForm
import ReportForm
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
 
 
class MainForm(QWidget, UI_MainForm.Ui_MainForm):
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self)
 
        self.pushButton_quit.clicked.connect(qApp.quit)
        self.pushButton_report.clicked.connect(self.report)
 
 
 
    def report(self):
        self.open_report = ReportForm.Report(self.lineEdit_user.text(), self.lineEdit_passwd.text())    #передаём в конструктор значения lineEdit_user и lineEdit_passwd
        self.open_report.show()
 
if __name__ == '__main__':
    main_form_app = QApplication(sys.argv)
    Main_window = MainForm()
    Main_window.show()
    sys.exit(main_form_app.exec_())
 
import sys
import UI_ReportForm
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
 
 
class Report(QWidget, UI_ReportForm.Ui_Form):
    def __init__(self, user, password):# ВОТ ОНИ РОДИМЫЕ!!!)))
        QWidget.__init__(self)
        self.setupUi(self)
 
        self.pushButton_exit.clicked.connect(self.close)
 
if __name__ == '__main__':
    report_app = QApplication(sys.argv)
    report_window = Report()
    report_window.show()
    sys.exit(report_app.exec_())
Метод report вызывается при нажатии кнопки, в котором конструктору класса Report передаем наши данные, но ведь после выхода из этого метода экземпляр будучи локальным, уничтожится. А данные никуда так и не уйдут.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
14.03.2018, 19:56
roll26, видимо, класс2 - MainForm, класс1 - Report.

Цитата Сообщение от roll26 Посмотреть сообщение
в котором конструктору класса Report передаем наши данные, но ведь после выхода из этого метода экземпляр будучи локальным, уничтожится. А данные никуда так и не уйдут.
Механизм Qt не даст этого сделать, ссылка на него останется после завершения процедуры и окно так и останется висеть.
Вам желательно сделать модальный диалог (погуглите сами). После показа берёте у формы логин-пароль, сохраняете, куда надо, и окно больше не нужно - можно закрывать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2018, 19:56
Помогаю со студенческими работами здесь

Обмен данными между родителем и потомком
Здравствуйте. Помогите решить задачу. Родитель передает потомку три стороны треугольника. Потомок получает площадь треугольника и передает...

Обмен данными между несколькими устройствами в локальной сети
Уважаемые знатоки. В наличии имеется несколько устройств. 1)ПК на системе linux 2)ПК на Windows 3)Телефон на android Все они...

Обмен данными между веб-приложением (Flask) и графическим приложением (PyQt5) (Python3.7)
С помощью каких библиотек (модулей) и каким образом можно реализовать сервер на базе графического приложения сделанного с помощью...

Защищенный обмен данными в сети
Друзья, накидайте вариантов для теоретической реализации курсовой работы на тему ЗАЩИЩЕННЫЙ ОБМЕН ДАННЫМИ В СЕТИ. Может кто-то может...

Обмен данными Python => Powershell
Как можно устроить обмен между Python и Powershell? Понимаю, что можно выгружать данные Python в файл и подтягивать его в Powershell, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru