Немного переделал код, предложенный PEHDOM, пример 2:
Главное отличие в том, что в данном случае дочернее окно ведёт себя отдельно от родительского, а значит, родительское может перекрыть собой дочернее.
Родитель # Python 3. PyQt4
# -*- coding: utf-8 -*-
# Родительское окно может перекрыть дочернее
import sys
import os
from PyQt4 import QtGui, QtCore
import mod_2
# ГРАФИКА
class Window_os(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.secondWin = None
self.opn_frame = None
self.resize(300, 300) # шир / выс окна
self.setWindowTitle('главное') # Заголовок
self.lab = QtGui.QLabel('simple text', self)
self.pole = QtGui.QTextEdit()
self.but1 = QtGui.QPushButton('open window', self)
self.but1.clicked.connect(self.on_click)
# БЛОК РАЗМЕТКИ
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.lab)
self.mainLayout.addWidget(self.pole)
self.mainLayout.addWidget(self.but1)
self.setLayout(self.mainLayout)
def on_click(self):
if not self.opn_frame:
self.secondWin = mod_2.SecondWindow(self)
self.opn_frame = QtGui.QFrame()
self.opn_frame_lay = QtGui.QHBoxLayout(self.opn_frame)
self.opn_frame_lay.addWidget(self.secondWin)
self.setLayout(self.opn_frame_lay)
self.secondWin.sendText.connect(self.pasteText)
self.opn_frame.resize(200, 200)
self.opn_frame.setWindowTitle('дочернее окно') # Заголовок
self.opn_frame.setWindowIcon(QtGui.QIcon('icon.png')) # Иконка
self.opn_frame.show()
def pasteText(self,text):
self.pole.setText(text)
# КОНЕЦ
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Window_os() # создаёт экземпляр окна из класса
window.move(400, 300) # сдвиг окна от верхнего левого угла экрана
window.show() # запускает окно
sys.exit(app.exec_())
Файл mod_2.py 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.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.sendText.emit(q) #посылаем сигнал по клику
Вообще, мне не понятно, зачем делать так:
...
self.build()
def build(self):
...
Т.е. для чего делать 2 функции, когда всё “на ура” проходит и в одной?