PyQt中QFrame窗口中的组件不显示的原因
文章目录
- 问题代码(例)
- 原因和解决方法
问题代码(例)
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont, QIcon, QCursor, QPixmap
import sysclass FrameToplevel(QFrame):def __init__(self, parent=None):super().__init__(parent)self.setFrameStyle(QFrame.Panel | QFrame.Sunken)self.setLineWidth(6)self.setMidLineWidth(10)self.setStyleSheet('background-color: #0098de;')class MainWindow(QMainWindow):def __init__(self):super().__init__()self.resize(750, 610)# 自定义鼠标self.setCursor(QCursor(QPixmap('mouse.png').scaled(30, 30), 0, 0))# frame窗口边的宽度self.frameWidth = 3self.setup_ui()# 设置主窗口组件def setup_ui(self):# 设置“录入信息”按钮button = QPushButton(self)button.setText('按钮')button.move(100, 100)button.resize(100, 100)button.clicked.connect(self.window_enter_modify)# 设置顶层frame窗口self.frameToplevel = FrameToplevel(self)self.frameToplevel.move(220, 100)self.frameToplevel.resize(520, 500)# 录入和修改功能执行窗口def window_enter_modify(self):# 设置姓名标签以及输入框Label = QLabel(self.frameToplevel)Label.setText('测试代码')Label.move(100, 100)print(1)if __name__ == '__main__':app = QApplication(sys.argv)mainwindow = MainWindow()# 创建font字体font_textEdit = QFont('宋体', 11)mainwindow.show()sys.exit(app.exec_())
运行结果:
如以上运行结果所示,点击按钮后,按钮连接的槽函数开始运行,控制台打印结果,但是Frame窗口上并未出现Label
标签。
原因和解决方法
原因是:在构建QFrame窗体时就已经写入了窗体可视化,窗口在创建后直接被绘制,使得后面的组件放置后不可见。
解决方法:
- 在创建窗体的后隐藏窗体,在组件全部构建完成后添加回来。
# 设置主窗口组件def setup_ui(self):# 设置“录入信息”按钮button = QPushButton(self)button.setText('按钮')button.move(100, 100)button.resize(100, 100)button.clicked.connect(self.window_enter_modify)# 设置顶层frame窗口self.frameToplevel = FrameToplevel(self)self.frameToplevel.move(220, 100)self.frameToplevel.resize(520, 500)self.frameToplevel.hide() # 隐藏Frame窗体# 录入和修改功能执行窗口def window_enter_modify(self):# 设置姓名标签以及输入框Label = QLabel(self.frameToplevel)Label.setText('测试代码')Label.move(100, 100)self.frameToplevel.show()print(1)
运行结果:
点击按钮后出现Frame窗体
- 在槽函数中实现Frame窗口的创建,在组件创建完成后调用
show()
方法展示窗体。
# 录入和修改功能执行窗口def window_enter_modify(self):# 设置顶层frame窗口self.frameToplevel = FrameToplevel(self)self.frameToplevel.move(220, 100)self.frameToplevel.resize(520, 500)self.frameToplevel.hide()# 设置姓名标签以及输入框Label = QLabel(self.frameToplevel)Label.setText('测试代码')Label.move(100, 100)self.frameToplevel.show()print(1)
运行结果: