PyQt5继承QMainWindow按钮不显示,继承QWidget正常的原因?
问题原因及解决方法
QMainWindow和QWidget的布局逻辑存在差异:QMainWindow有固定的窗口结构,自带菜单栏、工具栏、状态栏等区域,不能直接调用setLayout()给主窗口设置布局,所有自定义控件都需要放到它的**中央部件(Central Widget)**中。
修改后的代码
from PyQt5.QtWidgets import QMainWindow, QFormLayout, QPushButton, QApplication, QWidget import sys class Menu(QMainWindow): """ Create menu object """ def __init__(self, parent=None): """ Initialize main menu """ super().__init__(parent) self.file = None self.fields_create() self.create_table() def fields_create(self): """ Create buttons and LineEdits """ # Settings Button self.settings_btn = QPushButton() self.settings_btn.setText("Settings") self.settings_btn.clicked.connect(self.settings_click) def create_table(self): """ create and display table """ # 创建中央部件作为容器 central_widget = QWidget() self.flo = QFormLayout() self.flo.addRow(self.settings_btn) # 将布局设置给中央部件 central_widget.setLayout(self.flo) # 把中央部件设置给主窗口 self.setCentralWidget(central_widget) def settings_click(self): print("clicked") if __name__ == "__main__": app = QApplication(sys.argv) win = Menu() win.show() sys.exit(app.exec_())
关键改动说明
- 创建
QWidget实例作为中央部件,所有自定义布局和控件都挂载到这个部件上 - 调用
setCentralWidget()将中央部件绑定到QMainWindow,替代原有的直接调用setLayout()的操作
修改完成后,按钮就能正常显示在窗口中了。
内容的提问来源于stack exchange,提问作者Shane O Neil
相关产品推荐
相关产品推荐

