Могу ли я использовать разные классы пользовательского интерфейса, которые будут отображаться в определенной части окна, но все же использовать одно окно? Это будет похоже на элементы <div></div>
на HTML. Я пробовал, как показано ниже, но self.header
метка не отображалась после нажатия self.some_button
MainUi.py
from PyQt5 import QtWidgets, QtCore
class UserInterface(QtWidgets.QMainWindow):
# As Main Window, every widget will always be displayed
def setupUi(self, MainWindow):
MainWindow.resize(800, 600)
MainWindow.setWindowTitle("WindowTitle")
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.main_title = QtWidgets.QLabel(self.centralWidget)
self.main_title.setText("Some text")
self.some_button = QtWidgets.QPushButton(self.centralWidget)
self.some_button.move(20, 20)
self.some_button.setText("Some Button")
self.some_button.adjustSize()
MainWindow.setCentralWidget(self.centralWidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
class AboutPerson(QtWidgets.QWidget):
# As widget class, will be shown on a certain part of the main window
def __init__(self, parent=None, person=None):
super().__init__(parent)
self.header = QtWidgets.QLabel()
self.header.move(40, 0)
self.header.setText(f"Some header {person}")
self.show()
MainControl.py
from PyQt5 import QtWidgets
from MainUi import *
class ControlMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.main_ui = UserInterface()
self.main_ui.setupUi(self)
self.main_ui.some_button.clicked.connect(self.draw_about)
def draw_about(self):
self.about_ui = AboutPerson(self.main_ui, 'John')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
program = ControlMainWindow()
program.show()
sys.exit(app.exec_())