В PyQT особо не понимаю, только приступил к изучению. Не получается реализовать функцию 'open'. Необходимо связать главное окно с окном "text" так, чтобы при сохранении можно было передать текст в textEdit1 другого класса. Потому что, когда я пытаюсь это сделать через self.win.textEdit1.setText(text1) выдаёт ошибку "AttributeError: 'Ui_Text' object has no attribute 'textEdit1'". Я так понял, что класс главного окна не может изменить значение класса другого окна. Как можно это исправить?
Часть кода из design(design.ui)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowModality(QtCore.Qt.NonModal)
MainWindow.setEnabled(True)
MainWindow.resize(1012, 729)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(1012, 570))
font = QtGui.QFont()
Дочернее окно 1: help.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Help(object):
def setupUi(self, Help):
Help.setObjectName("Help")
Help.resize(700, 501)
self.formLayout = QtWidgets.QFormLayout(Help)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setHorizontalSpacing(0)
self.formLayout.setObjectName("formLayout")
self.listWidget = QtWidgets.QListWidget(Help)
self.listWidget.setEnabled(True)
self.listWidget.setMinimumSize(QtCore.QSize(700, 501))
self.listWidget.setResizeMode(QtWidgets.QListView.Fixed)
self.listWidget.setObjectName("listWidget")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.listWidget)
self.retranslateUi(Help)
QtCore.QMetaObject.connectSlotsByName(Help)
def retranslateUi(self, Help):
_translate = QtCore.QCoreApplication.translate
Help.setWindowTitle(_translate("Help", "Dialog"))
Дочерние окно 2 в которое надо переносить данные из txt: text.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Text(object):
def setupUi(self, Text):
Text.setObjectName("Text")
Text.resize(958, 736)
Text.setIconSize(QtCore.QSize(30, 30))
self.centralwidget = QtWidgets.QWidget(Text)
self.centralwidget.setMinimumSize(QtCore.QSize(775, 583))
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setSpacing(7)
self.gridLayout.setObjectName("gridLayout")
self.textEdit1 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit1.setObjectName("textEdit1")
self.textEdit1.setText('')
text = self.textEdit1
self.gridLayout.addWidget(self.textEdit1, 0, 0, 1, 1)
Text.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Text)
self.menubar.setGeometry(QtCore.QRect(0, 0, 958, 26))
self.menubar.setObjectName("menubar")
Text.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Text)
self.statusbar.setObjectName("statusbar")
Text.setStatusBar(self.statusbar)
self.retranslateUi(Text)
QtCore.QMetaObject.connectSlotsByName(Text)
def retranslateUi(self, Text):
_translate = QtCore.QCoreApplication.translate
Text.setWindowTitle(_translate("Text", "MainWindow"))
def main():
app = QApplication(sys.argv)
window = Ui_Text()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
И файл app.py где я инициализирую интерфейс и т.д.
from sys import argv
from typing import List
from PyQt5 import QtWidgets, Qt, QtCore
from PyQt5.QtMultimedia import QSound
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QTextEdit, QDialog, QFileDialog
from PyQt5.QtGui import QFontDatabase, QIcon
from PyQt5 import QtGui
from PyQt5.QtCore import QCoreApplication
import design
import Help
import text
class Text(QMainWindow,text.Ui_Text):
def __init__(self, parent=None):
"""Метод инициализации интерфейса."""
super(Text, self).__init__(parent)
self.setupUi(self)
self.show()
class Helped(QDialog, Help.Ui_Help):
def __init__(self, parent=None):
"""Метод инициализации интерфейса."""
super(Helped, self).__init__(parent)
self.setupUi(self)
self.show()
class ExampleApp(QMainWindow, design.Ui_MainWindow):
def __init__(self,parent=None):
"""Метод инициализации интерфейса."""
super(ExampleApp, self).__init__(parent)
QFontDatabase.addApplicationFont('fonts/circe.ttf')
QFontDatabase.addApplicationFont('fonts/circe-bold.ttf')
QFontDatabase.addApplicationFont('fonts/circe-extrabold.ttf')
self.setupUi(self)
self.pushButton.clicked.connect(self.count)
self.setWindowIcon(QIcon('calculator.png'))
self.action_Quit.triggered.connect(self.close)
self.menuFile.triggered.connect(self.selected)
self.action_Document.triggered.connect(self.dialog)
self.action_Save.triggered.connect(self.save)
self.actionSave_as.triggered.connect(self.save_as)
self.action_Open.triggered.connect(self.file_open())
self.Sound = QSound('sound_button.wav', self)
self.pushButton.clicked.connect(self.Sound.play)
self.action_Quit.triggered.connect(self.Sound.play)
self.menuFile.triggered.connect(self.Sound.play)
self.action_Document.triggered.connect(self.Sound.play)
self.menu_Help.triggered.connect(self.Sound.play)
self.show()
self.name = "save.txt"
def okno2(self):
self.okno = Helped()
self.okno.show()
def file_open(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', '', '*.txt')[0]
self.win = text.Ui_Text()
if len(fname) > 0:
f = open(fname,'r')
with f:
text1 = f.read()
self.win.textEdit1.setText(text1)
self.okno2()
def save_as(self):
self.name = QtWidgets.QFileDialog.getSaveFileName(self, 'Save File', '', '(*.txt')[0]
self.save()
def save(self):
a_field = (
self.a_field.text(), self.b_field.text(), self.h_field.text(), self.as_field.text(), self.m_field.text(),
self.class_bt.currentText(), self.class_ar.currentText(), self.answer_text.toPlainText())
if a_field[0] == '' or a_field[1] == '' or a_field[2] == '' or a_field[3] == '' or a_field[4] == ''or a_field[7] == '':
reply = QtWidgets.QMessageBox.information(self, "Save", "Enter the data click the calculate button to save the data",
QtWidgets.QMessageBox.Yes)
else:
if len(self.name)>0:
with open(self.name,'a') as f:
f.write('а= '+a_field[0]+' мм'+'\n'+'b= '+a_field[1]+' мм'+'\n'+'h= '+ a_field[2]+' мм'+'\n'+'As= '+ a_field[3]+' мм2'+'\n'+'M= '+ a_field[4]+' kH*M'+'\n'+'Класс бетона: '+ a_field[5]+'\n'+'Класс арматуры: '+ a_field[6]+'\n'+'Прочность арматуры: '+ a_field[7]+'\n \n')
def dialog(self):
dialog = QtWidgets.QDialog()
dialog.ui = Help.Ui_Help()
dialog.ui.setupUi(dialog)
dialog.exec_()
dialog.show()
.. тут идут расчеты и т.д
Ещё интересует вопрос. У меня есть функция клика по виджету self.pushButton.clicked.connect(self.count), как я могу добавить ещё одну функцию при нажатии пкм. Заранее спасибо