Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/64: Рейтинг темы: голосов - 64, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
1

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

29.12.2016, 14:01. Показов 12802. Ответов 11

Author24 — интернет-сервис помощи студентам
Поясните как передавать правильно данные из одной формы в другую?
Задача такая, из главной формы получается передать текст во вторую ( Вывожу в lineedit ). Из второй на главную в lineedit когда передаю закрывается окно. Объясните как исправить?
вот код главного файла main.py
Кликните здесь для просмотра всего текста
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
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from gui import *
from gui2 import *
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class StartMyMain(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent, QtCore.Qt.Window)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
        self.ui.pushButton.clicked.connect(self.trik)
 
 
    def trik(self):
        self.aboutshow1 = AboutUs()
        self.aboutshow1.show()
        self.aboutshow1.lineEdit.setText('Наш текст') #  Из главной формы передается во вторую
        self.close()
 
 
 
class AboutUs(QtWidgets.QMainWindow, Ui_MainWindow1):
    def __init__(self, parent=None):
        super().__init__(parent, QtCore.Qt.Window)
        self.setupUi(self)
 
        self.pushButton.clicked.connect(self.aboutshow)
 
    def aboutshow(self):
        strQ = self.lineEdit.text()
        print(strQ)
        self.mainwindow = StartMyMain()
        self.mainwindow.lineEdit.setText(strQ)# Из второй формы передаю в первую, ОКНО КРАШИТСЯ
        self.close()
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = StartMyMain()
    myapp.show()
    sys.exit(app.exec_())


Код формы:
gui.py
Кликните здесь для просмотра всего текста
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
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'gui.ui'
#
# Created by: PyQt5 UI code generator 5.5
#
# WARNING! All changes made in this file will be lost!
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(488, 352)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(30, 20, 421, 51))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 90, 251, 28))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(80, 180, 181, 71))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 488, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Вызвать форму"))
        self.label.setText(_translate("MainWindow", "текст какой то"))


gui2.py
Кликните здесь для просмотра всего текста
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
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'gui2.ui'
#
# Created by: PyQt5 UI code generator 5.5
#
# WARNING! All changes made in this file will be lost!
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow1(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(495, 306)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(60, 10, 371, 51))
        self.label.setStyleSheet("font: 16pt "MS Shell Dlg 2";")
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(30, 60, 421, 61))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(130, 140, 221, 28))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 495, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Тут пишем наш текст"))
        self.pushButton.setText(_translate("MainWindow", "отобразить"))


Добавлено через 3 часа 33 минуты
Дайте хоть какою-то подсказку
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2016, 14:01
Ответы с готовыми решениями:

Обмен данными между формами
Добрый вечер. Пишу небольшое приложение средствами PyQt, хотел посоветоваться, как лучше...

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

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

Обмен данными между объектами форм
Как в ASP.NET осуществить обмен данными между объектами формы? Пример: есть страница...

11
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2016, 14:42 2
lepus007, просто так закрываться ничего не может, раз закрывается значит из-за ошибки падает, покажи полный traceback ошибки.

А то код (вырви глаз) сгенеренный дизайнером вообще не улыбается.
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
30.12.2016, 10:34  [ТС] 3
C:\Python34\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 2016.2.1\helpers\pydev\pydevd.py" --multiproc --qt-support --client 127.0.0.1 --port 52513 --file F:/My_Pyton/Project/MyBugalter/test3.py
pydev debugger: process 3496 is connecting

Connected to pydev debugger (build 162.1628.8)
Наш текст
Traceback (most recent call last):
File "F:/My_Pyton/Project/MyBugalter/test3.py", line 37, in aboutshow
self.mainwindow.lineEdit.setText(strQ)# Из второй формы передаю в первую, ОКНО КРАШИТСЯ
AttributeError: 'StartMyMain' object has no attribute 'lineEdit'

Process finished with exit code -805306369 (0xCFFFFFFF)
Вот то что в консоль выпадает.

Добавлено через 24 минуты
На 1й форме только кнопка и lineedit и label, на 2й тоже самое.
Изменил строку № 37
Python
1
self.mainwindow.ui.lineEdit.setText(strQ)
Вот что в консоле
C:\Python34\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 2016.2.1\helpers\pydev\pydevd.py" --multiproc --qt-support --client 127.0.0.1 --port 52667 --file F:/My_Pyton/Project/MyBugalter/test3.py
pydev debugger: process 5308 is connecting

Connected to pydev debugger (build 162.1628.8)
Наш текст

Process finished with exit code 0
Программа работает правильно, но в lineedit текст не выводится((

Добавлено через 17 часов 0 минут
Почему я из главного окна могу передать данные, во второе окно.
А Из второго окна не могу передать в главное.

Этот код работает из главного окна вызываю второе и вlineedit передаю "какой то текст"
Python
1
2
3
4
        def trik(self):
        self.aboutshow1 = AboutUs()
        self.aboutshow1.show()
        self.aboutshow1.lineEdit.setText('Наш текст') #  Из главной формы передается во вторую
Таже самоя функция идинтична первой, только вызывается во втором окне и передает данные в главное.
Python
1
2
3
4
5
6
    def aboutshow(self):
        strQ = self.lineEdit.text()
        print(strQ)
        self.mainwindow = StartMyMain()
        self.mainwindow.ui.lineEdit.setText(strQ)# Из второй формы передаю в первую, ОКНО КРАШИТСЯ
        self.close()
Почему она отрабатывает без ошибки, strQ переменная не пустая, Но текст в lineedit не отображается ????

В чем ошибка?
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
31.12.2016, 13:53  [ТС] 4
Все еще актуально, решение не нашел. Приведите пример своего кода как передаете данные из одной формы в другую.
ПОЖАЛУЙСТА!!!

И всех с Наступающим !
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
02.01.2017, 18:02 5
Все просто как 2*2=4
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
49
50
51
52
53
54
55
56
57
58
import sys
 
from PyQt4 import QtGui, QtCore
 
 
class SecondWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent, QtCore.Qt.Window)
 
        self.build()
 
    def build(self):
        self.mainLayout = QtGui.QVBoxLayout()
 
        self.edit = QtGui.QLineEdit(self)
        self.mainLayout.addWidget(self.edit)
 
        self.but1 = QtGui.QPushButton('close window', self)
        self.but1.clicked.connect(self.close_window)
        self.mainLayout.addWidget(self.but1)
 
        self.setLayout(self.mainLayout)
 
    def close_window(self):
        self.close()
        self.parent().edit.setText(self.edit.text())
 
 
class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.secondWin = None
        self.build()
 
    def build(self):
        self.mainLayout = QtGui.QVBoxLayout()
 
        self.edit = QtGui.QLineEdit(self)
        self.mainLayout.addWidget(self.edit)
 
        self.but1 = QtGui.QPushButton('open window', self)
        self.but1.clicked.connect(self.open_win)
        self.mainLayout.addWidget(self.but1)
 
        self.setLayout(self.mainLayout)
 
    def open_win(self):
        if not self.secondWin:
            self.secondWin = SecondWindow(self)
        self.secondWin.edit.setText('текст переданный с первой формы')
        self.secondWin.show()
 
 
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
1
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
02.01.2017, 23:10  [ТС] 6
у меня pyqt5. попытался твой код переделать на pyqt5. код запустился но LineEdit не отображаются xD
Кое что почерпнул из твоего кода в свой. Нечего не заработало (((

Интересный питон язык один и тот же код работать отказывается.
Эта функция работает:
Python
1
2
3
4
    def trik(self):
        self.aboutshow1 = AboutUs()
        self.aboutshow1.show()
        self.aboutshow1.lineEdit.setText('Наш текст') #  Из главной формы передается во вторую
Такая же функция, не работает:
Python
1
2
3
4
5
    def aboutshow(self):
        strQ = self.lineEdit.text()
        self.line = StartMyMain()
        self.line.lineEdit.setText(strQ)
        self.close()
И дебагер молчит. Не показывает ни единой ошибки.

В любом случае спасибо за отклик!!!
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
02.01.2017, 23:28 7
lepus007, не представляю в чем у тебя проблема, pyqt5 от 4 отличается только импортами. Как видно код ни чем не изменился.

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
49
50
51
52
53
54
55
56
57
58
import sys
 
from PyQt5 import QtWidgets, QtCore
 
 
class SecondWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent, QtCore.Qt.Window)
 
        self.build()
 
    def build(self):
        self.mainLayout = QtWidgets.QVBoxLayout()
 
        self.edit = QtWidgets.QLineEdit(self)
        self.mainLayout.addWidget(self.edit)
 
        self.but1 = QtWidgets.QPushButton('close window', self)
        self.but1.clicked.connect(self.close_window)
        self.mainLayout.addWidget(self.but1)
 
        self.setLayout(self.mainLayout)
 
    def close_window(self):
        self.close()
        self.parent().edit.setText(self.edit.text())
 
 
class MainWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.secondWin = None
        self.build()
 
    def build(self):
        self.mainLayout = QtWidgets.QVBoxLayout()
 
        self.edit = QtWidgets.QLineEdit(self)
        self.mainLayout.addWidget(self.edit)
 
        self.but1 = QtWidgets.QPushButton('open window', self)
        self.but1.clicked.connect(self.open_win)
        self.mainLayout.addWidget(self.but1)
 
        self.setLayout(self.mainLayout)
 
    def open_win(self):
        if not self.secondWin:
            self.secondWin = SecondWindow(self)
        self.secondWin.edit.setText('текст переданный с первой формы')
        self.secondWin.show()
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
Цитата Сообщение от lepus007 Посмотреть сообщение
Интересный питон язык один и тот же код работать отказывается.
Может потому, что нужно как раз писать не один и тот же код....

Цитата Сообщение от lepus007 Посмотреть сообщение
Такая же функция, не работает:
Вот даже не смотря всю твою портянку кода уверен что вижу ошибку и отсюда видно, что из моего кода ты ничему не научился. Ты берешь и создаешь новое окно (не отображаешь его и по этому не видишь создания ещё 1 окна) и туда кидаешь данные, вместо того, чтобы кидать данные в то окно которое нужно.
1
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
03.01.2017, 00:17  [ТС] 8
Попробовал передать так как в твоем коде.
Python
1
self.parent().lineEdit.setText('fff')
дебагер выдает
self.parent().lineEdit.setText('fff')
AttributeError: 'NoneType' object has no attribute 'lineEdit'
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
03.01.2017, 00:30 9
Обрати у меня в коде внимание на строки 49, 7 and 8. При инициализации дочернего окна там передается ссылка на родителя, у тебя это не происходит.
1
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
03.01.2017, 00:37  [ТС] 10
alex925, Все получилось!!! Очень тебе благодарен! Ты мне очень помог )))
вот что надо было
Python
1
myapp.lineEdit.setText("ffff")
Я же екземпляр создавал в самом низу этого окна. А потом изобретал велосипед чтоб передать переменную.
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
03.01.2017, 00:38 11
lepus007, пиши код руками, а не в дизайнере генери портянки с тучей мусора, тогда код чище будет и понимать ты его будешь лучше.
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
03.01.2017, 00:45  [ТС] 12
код руками это следующий шаг. Это первая прога которая на питоне пишу. Хотел именно через редактор сделать.
еще раз тебе спасибо!
0
03.01.2017, 00:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2017, 00:45
Помогаю со студенческими работами здесь

Создать сценарий, где происходит запуск двух приложений и обмен данными между ними
Добрый день! Подскажите, пожалуйста, как решить задачі ниже: 1.Создать сценарий, где происходит...

Как организовать обмен данными между двумя таблицами двух разных файлов Access?
ВОПРОС: - Как организовать обмен данными между двумя таблицами двух разных файлов Access? ...

1. Обмен данными с рабочей книгой MS Excel. 2. Проектирование форм окон
1. Для восьми хозяйств известны общий объем валовой продукции (ден.ед) и площадь...

Обмен данными между УТ 10.3.5 и БП 1.6.9
Доброе время суток, возникла небольшая проблема с обменом данными между УТ и БП: Все торговые...

Обмен данными между БД и С++
Всем привет! Скажите, кто знает как организовать работу с базами данных (к примеру, с аксессом) в...

Обмен данными между С++ и С++
Есть два проекта на С++(VS2010) - В одном генерируются числа, которые надо передавать во...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru