В ответе PyQT: как открыть новое окно использует QMainWindow в отличие от вас, кто использует QWidget.
В чем разница между QMainWindow и QWidget?
QMainWindow
- это пользовательский QWidget
, в котором активированы некоторые флаги, включая флаг Qt::Window
. Как указано в документах указывает:
Указывает, что виджет является окном, обычно с оконной системой
рамка и строка заголовка, независимо от того, есть ли у виджета родитель
или нет. Обратите внимание, что невозможно сбросить этот флаг, если виджет
не имеет родителя.
То есть этот виджет станет окном, даже если у него есть родительский виджет.
Таким образом, решение состоит в том, чтобы активировать этот флаг в Window2:
import sys
from PyQt5 import QtCore, QtWidgets
class Window2(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window2, self).__init__(parent, QtCore.Qt.Window) # <---
class Window(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.init_ui()
def init_ui(self):
self.btn = QtWidgets.QPushButton("Push Me")
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.btn)
self.setWindowTitle("PyQt5 double window")
self.btn.clicked.connect(self.btn_clk)
self.newindow = Window2(self)
self.show()
def btn_clk(self):
self.newindow.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
a_window = Window()
sys.exit(app.exec_())
Другие альтернативные решения: