PyQt5构建番茄病害分类GUI时控件加入垂直盒布局不显示问题
PyQt GUI布局控件不显示问题
问题场景
我训练了一个番茄病害分类模型,需要为其开发简易GUI,需求如下:
- 顶部居中设置图片上传按钮
- 病害名称以标签形式展示在上传按钮和图片之间
- 窗口中部展示上传的图片
- 图片下方放置预测按钮用于识别病害名称
- 底部居中放置退出按钮
我将所有标签和按钮添加到QVBoxLayout(垂直盒布局)后运行代码,窗口内没有任何控件显示。
相关代码
def initUI(self): self.image_label = QLabel() self.predicted_label = QLabel() self.upload_button = QPushButton('Upload Image') self.upload_button.clicked.connect(self.click_upload) self.upload_button.setFixedSize(QtCore.QSize(100, 25)) self.predict_button = QPushButton('Predict') self.predict_button.clicked.connect(self.click_predict) self.predict_button.setFixedSize(QtCore.QSize(100, 25)) self.quit_button = QPushButton('Quit') self.quit_button.clicked.connect(self.click_quit) self.quit_button.setFixedSize(QtCore.QSize(100, 25)) self.vbox = QVBoxLayout() self.vbox.addWidget(self.upload_button, 0, alignment=QtCore.Qt.AlignHCenter) self.vbox.addWidget(self.predicted_label, 0, alignment=QtCore.Qt.AlignHCenter) self.vbox.addWidget(self.image_label, 0, alignment=QtCore.Qt.AlignHCenter) self.vbox.addWidget(self.predict_button, 0, alignment=QtCore.Qt.AlignHCenter) self.vbox.addWidget(self.quit_button, 0, alignment=QtCore.Qt.AlignHCenter) self.hbox = QHBoxLayout() self.hbox.addStretch() self.hbox.addLayout(self.vbox) self.hbox.addStretch() self.setLayout(self.hbox) self.show()
解决方案
该问题是窗口类继承的父类使用错误导致:QMainWindow 有固定的内置布局结构,自带菜单栏、状态栏、中央控件区域,无法直接给QMainWindow实例设置根布局,必须先创建QWidget实例作为中央控件,调用setCentralWidget()方法绑定后,再将布局设置到该中央控件上才能生效。
如果不需要使用QMainWindow的菜单栏、状态栏等特性,直接将窗口类的继承对象从QMainWindow改为QWidget即可快速修复问题。
内容的提问来源于stack exchange,提问作者Kanan Mahammadli
相关产品推荐
相关产品推荐

