Я пытаюсь получить доступ к тексту, написанному в QLineEdit, из другого класса, но он возвращает пустую строку.
Вот минималистичный функциональный фрагмент кода (Python 2.7):
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.createmenus()
self.initui()
self.central_widget = QStackedWidget()
self.setCentralWidget(self.central_widget)
testWidgets = Container0()
self.central_widget.addWidget(testWidgets)
def initui(self):
self.setWindowTitle("TestWindow")
self.show()
def createmenus(self):
viewFile = self.menuBar().addMenu("File")
expMenu = QMenu("Export", self)
expAct = QAction("Save", self)
expMenu.addAction(expAct)
expMenu.triggered[QAction].connect(self.export_config)
viewFile.addMenu(expMenu)
def export_config(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(self, "Save as", "C:/", "Text (*.txt);;All Files (*)",
options=options)
if fileName:
Export().export(fileName)
class Container0(QWidget):
def __init__(self):
super(QWidget, self).__init__()
self.mainlayout = QVBoxLayout(self)
self.vbox_layout = QVBoxLayout()
self.text1 = QLineEdit()
print self.text1
self.vbox_layout.addWidget(self.text1)
self.mainlayout.addLayout(self.vbox_layout)
class Export():
def export(self, path):
tw = Container0()
t1 = tw.text1
t1text = t1.text()
print t1
print t1text
print path
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
sys.exit(app.exec_())
О коде:
Прежде всего я создаю свой QMainWindow
, который вызывает функции initui
и createmenus
. В следующем классе Container0
я реализую виджет QLineEdit
. Я разделил классы, потому что приложение, которое я пишу, имеет несколько окон и панель инструментов с кнопками «Далее» и «Назад», которые заменяют centralWidget
на класс, который я сохранил, окно, которое я хочу отобразить следующим. (Надеюсь, это была неплохая идея)
Чего я хочу достичь
В настоящее время, когда я что-то записываю в QLineEdit
, а затем захожу в меню «Файл -> Экспорт -> Сохранить» и вставляю путь, код вызывает класс Export
и его функцию export
, которая должна прочитайте строку, которую я написал в QLineEdit
, и напечатайте ее среди путей. Проблема в том, что мой вывод из моего QLineEdit представляет собой пустую строку. Кроме того, функция Export
, кажется, создает еще один экземпляр из QLineEdit
. Обратите внимание на различные области памяти, когда я звоню print self.text1
:
<PyQt5.QtWidgets.QLineEdit object at 0x0000000002968B88>
<PyQt5.QtWidgets.QLineEdit object at 0x0000000002968DC8>
<PyQt5.QtWidgets.QLineEdit object at 0x0000000002968DC8>
### <- This is the empty line
C:/123
Это заставляет меня задуматься, как я могу вызвать строку QLineEdit
без создания другого экземпляра. Кроме того, это правильный способ обработки нескольких окон?
TL, DR: QLineEdit
возвращает пустую строку. Не должно. Предложения о структуре кода также приветствуются. Спасибо!