@x_GG

PyQT5. Открытие файла в textEdition в дочернем окне. Как реализовать?

В 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), как я могу добавить ещё одну функцию при нажатии пкм. Заранее спасибо
  • Вопрос задан
  • 325 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
self.win = text.Ui_Text()

Ты уверен, что при конструировании объекта окна автоматически вызовется его метод setupUi()?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы