Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
2 / 2 / 2
Регистрация: 19.10.2014
Сообщений: 56
PyQt5

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

13.03.2018, 21:13. Показов 3219. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru