告诉我为什么当我们继承时窗口不显示
class MyWidget(QMainWindow):
...
当我们继承自
class MyWidget(QWidget):
...
Работает:继承自QWidget:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, QPushButton
from PyQt5.QtWidgets import QApplication, QMainWindow
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.button_hello = QPushButton('Hello')
self.button_hello.clicked.connect(self.add_button)
self.layout_buttons = QVBoxLayout()
self.layout_buttons.addStretch() # Это добавит пружину, прижимающую виджеты вверх
self.frame = QFrame()
self.frame.setMinimumSize(200, 200)
self.frame.setFrameStyle(QFrame.Box)
self.frame.setLayout(self.layout_buttons)
main_layout = QVBoxLayout()
main_layout.addWidget(self.button_hello)
main_layout.addWidget(self.frame)
self.setLayout(main_layout)
def add_button(self):
button = QPushButton('Кнопка')
self.layout_buttons.insertWidget(0, button) # Добавление в начало, с пружиной это прижмет вверх
# self.layout_buttons.addWidget(button) # Добавление в конец, с пружиной это прижмет вниз
app = QApplication([])
mw = MyWidget()
mw.show()
app.exec()
Не работает:继承自QMainWindow:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, QPushButton
from PyQt5.QtWidgets import QApplication, QMainWindow
class MyWidget(QMainWindow):
def __init__(self):
super().__init__()
self.button_hello = QPushButton('Hello')
self.button_hello.clicked.connect(self.add_button)
self.layout_buttons = QVBoxLayout()
self.layout_buttons.addStretch() # Это добавит пружину, прижимающую виджеты вверх
self.frame = QFrame()
self.frame.setMinimumSize(200, 200)
self.frame.setFrameStyle(QFrame.Box)
self.frame.setLayout(self.layout_buttons)
main_layout = QVBoxLayout()
main_layout.addWidget(self.button_hello)
main_layout.addWidget(self.frame)
self.setLayout(main_layout)
def add_button(self):
button = QPushButton('Кнопка')
self.layout_buttons.insertWidget(0, button) # Добавление в начало, с пружиной это прижмет вверх
# self.layout_buttons.addWidget(button) # Добавление в конец, с пружиной это прижмет вниз
app = QApplication([])
mw = MyWidget()
mw.show()
app.exec()
PS代码仅在一行上有所不同:
class MyWidget(QWidget или QMainWindow):
QMainWindow 有自己的布局。更多https://doc.qt.io/qt-5/qmainwindow.html#details
因为类
QMainWindow(不像QWidget)不能设置布局。