вариант намбер раз: через калбекфункцию, котороую вы передадите дочке.
import sys
from PyQt4 import QtGui, QtCore
import mod
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.secondWin = None
self.build()
def build(self):
self.resize(300, 200)
self.lab = QtGui.QLabel('simple text', self)
self.pole = QtGui.QTextEdit()
self.but1 = QtGui.QPushButton('open window', self)
self.but1.clicked.connect(self.openWin)
# Блок разметки
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.lab)
self.mainLayout.addWidget(self.pole)
self.mainLayout.addWidget(self.but1)
self.setLayout(self.mainLayout)
def openWin(self):
if not self.secondWin:
#передаем в качестве второго параметра метод pasteText
self.secondWin = mod.SecondWindow(self, self.pasteText)
self.secondWin.show()
def pasteText(self,text):
self.pole.setText(text)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
import sys
from PyQt4 import QtGui, QtCore
class SecondWindow(QtGui.QWidget):
def __init__(self, parent=None, callback=None):
# Передаём ссылку на родительский элемент и чтобы виджет
# отображался как самостоятельное окно указываем тип окна
super().__init__(parent, QtCore.Qt.Window)
self.build()
self.callbackFunction = callback
def build(self):
self.resize(100, 100)
self.pole_2 = QtGui.QTextEdit()
self.button_0 = QtGui.QPushButton('Жми')
# Блок разметки
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.pole_2)
self.mainLayout.addWidget(self.button_0)
self.setLayout(self.mainLayout)
self.button_0.clicked.connect(self.on_click_1)
def on_click_1(self, text):
q = self.pole_2.toPlainText()
#self.pole.setText(str(q))
if self.callbackFunction: # если передали калбек функцию вызываем ее..
self.callbackFunction(q)
Вариант намбер ту: используя сигналы и слоты
import sys
from PyQt4 import QtGui, QtCore
import mod
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.secondWin = None
self.build()
def build(self):
self.resize(300, 200)
self.lab = QtGui.QLabel('simple text', self)
self.pole = QtGui.QTextEdit()
self.but1 = QtGui.QPushButton('open window', self)
self.but1.clicked.connect(self.openWin)
# Блок разметки
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.lab)
self.mainLayout.addWidget(self.pole)
self.mainLayout.addWidget(self.but1)
self.setLayout(self.mainLayout)
def openWin(self):
if not self.secondWin:
self.secondWin = mod.SecondWindow(self)
# соединяем сигнал sendText от дочернего окна с методом pasteText
self.secondWin.sendText.connect(self.pasteText)
self.secondWin.show()
def pasteText(self,text):
self.pole.setText(text)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
import sys
from PyQt4 import QtGui, QtCore
class SecondWindow(QtGui.QWidget):
sendText = QtCore.pyqtSignal(str) # сигнал
def __init__(self, parent=None):
# Передаём ссылку на родительский элемент и чтобы виджет
# отображался как самостоятельное окно указываем тип окна
super().__init__(parent, QtCore.Qt.Window)
self.build()
def build(self):
self.resize(100, 100)
self.pole_2 = QtGui.QTextEdit()
self.button_0 = QtGui.QPushButton('Жми')
# Блок разметки
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.pole_2)
self.mainLayout.addWidget(self.button_0)
self.setLayout(self.mainLayout)
self.button_0.clicked.connect(self.on_click_1)
def on_click_1(self, text):
q = self.pole_2.toPlainText()
#self.pole.setText(str(q))
self.sendText.emit(q) #посылаем сигнал по клику
Варианет намбер три, получить родителя воспользовавшить ф-цей parent. Хотя это и не кошерно, так как подразумевает что дочернее окно должно знать методы родительского.
import sys
from PyQt4 import QtGui, QtCore
class SecondWindow(QtGui.QWidget):
def __init__(self, parent=None):
# Передаём ссылку на родительский элемент и чтобы виджет
# отображался как самостоятельное окно указываем тип окна
super().__init__(parent, QtCore.Qt.Window)
self.build()
# так получаем сыылку на родительское окно
self.parrent = self.parent()
# или можно даже так
#self.parrent = parent
def build(self):
self.resize(100, 100)
self.pole_2 = QtGui.QTextEdit()
self.button_0 = QtGui.QPushButton('Жми')
# Блок разметки
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.pole_2)
self.mainLayout.addWidget(self.button_0)
self.setLayout(self.mainLayout)
self.button_0.clicked.connect(self.on_click_1)
def on_click_1(self, text):
q = self.pole_2.toPlainText()
self.parrent.pole.setText(str(q)) # вызываем метод родительского окна
Вариант намбер четыре: использовать eventFilter тогда можно даже без кнопки обойтись и текст набраный в дочернем окне сразу будет появляться в родительсклм. но писать сейчас времени нету…