Как получить значение lineEdit при вызове функции из модуля?
я начинаю изучать Python и PyQt и у меня появился вопрос насчёт вызова функции из модуля и работы с объектами PyQt.
Есть 3 файла. Мне нужно получить значение из lineEdit в функции Second.py, а затем вызвать эту функцию в First.py.
Но значение в lineEdit задаётся внутри First.py. lineEdit изначально создан в файле design.py
Ниже приведён упрощённый код:
design.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'design.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# 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(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(230, 190, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(370, 190, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
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", "PushButton"))
First.py
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
import design
from Second import Hax
class App(QtWidgets.QMainWindow, design.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.lineEdit.setText("Текст для ввода")
self.pushButton.clicked.connect(self.Test)
def Test(self):
Hax().calc()
def main():
App = QtWidgets.QApplication([])
window = App()
window.show()
app.exec_()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
Second.py
from PyQt5 import QtWidgets
import design
class Hax(QtWidgets.QMainWindow, design.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
def calc(self):
print(self.lineEdit.text())
print("Текст?")
Ответы (1 шт):
Хотя я не совсем понимаю что будет дальше, но попробуйте передать self.lineEdit.text() при вызове метода calc(self.lineEdit.text())
q1300772_design.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(230, 190, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(370, 190, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
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", "PushButton"))
q1300772_First.py
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
import q1300772_design
from q1300772_Second import Hax
class App(QtWidgets.QMainWindow, q1300772_design.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("q1300772_First")
self.lineEdit.setText("Текст для ввода")
self.pushButton.clicked.connect(self.Test)
self.second = Hax() # +++
def Test(self):
# Hax().calc()
self.second.calc(self.lineEdit.text()) # +++ self.lineEdit.text()
''' ???
def main():
App = QtWidgets.QApplication([])
window = App()
window.show()
app.exec_()
'''
if __name__ == '__main__':
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
q1300772_Second.py
from PyQt5 import QtWidgets
import q1300772_design
class Hax(QtWidgets.QMainWindow, q1300772_design.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("q1300772_Second...")
def calc(self, text): # +++ text
# print(self.lineEdit.text())
print("Текст ?", text) # +++ text
Update
но это несколько другое решение, которое я хотел найти. Возможно, я неправильно выразился в начальной постановке. В полной версии кода, из self.lineEdit я получаю текст и использую внутри функции calc. Ваше решение было бы идеальным если бы число используемых объектов было небольшим, а так мне нужно будет передать более 10 lineEdit.
Вот вам другой вариант:
q1300772_First.py
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
import q1300772_design
from q1300772_Second import Hax
class App(QtWidgets.QMainWindow, q1300772_design.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("q1300772_First")
self.lineEdit.setText("Текст для ввода")
self.pushButton.clicked.connect(self.Test)
self.second = Hax(self) # +++ self
def Test(self):
self.second.calc() # +++
if __name__ == '__main__':
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
q1300772_Second.py
from PyQt5 import QtWidgets
import q1300772_design
class Hax(QtWidgets.QMainWindow, q1300772_design.Ui_MainWindow):
def __init__(self, parent=None): # +++ parent=None
super().__init__(parent) # +++ parent
self.setupUi(self)
self.setWindowTitle("q1300772_Second...")
self.parent = parent # +++
def calc(self):
print("Текст ?", self.parent.lineEdit.text()) # +++ self.parent...

