PyQt中QFrame窗口中的组件不显示的原因

文章目录

问题代码(例)

python 复制代码
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont, QIcon, QCursor, QPixmap
import sys


class 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 = 3

        self.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窗体时就已经写入了窗体可视化,窗口在创建后直接被绘制,使得后面的组件放置后不可见。

解决方法:

  1. 在创建窗体的后隐藏窗体,在组件全部构建完成后添加回来。
python 复制代码
    # 设置主窗口组件
    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窗体

  1. 在槽函数中实现Frame窗口的创建,在组件创建完成后调用show()方法展示窗体。
python 复制代码
    # 录入和修改功能执行窗口
    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)

运行结果:

相关推荐
淮北49413 小时前
ubuntu22.04将mp4转换成gif
python·scrapy·flask·beautifulsoup·pyqt·matplotlib
懷淰メ1 天前
【AI加持】基于PyQt+YOLO+DeepSeek的口罩佩戴检测系统(详细介绍)
yolo·计算机视觉·pyqt·口罩检测·deepseek·ai加持
小灰灰搞电子4 天前
PyQt QWebChannel详解-C++与Web页面的无缝双向通信
前端·pyqt
小灰灰搞电子5 天前
PyQt QtAwesome详解:为Qt应用注入字体图标的魅力
pyqt·字体图标
DeepLearningYolo6 天前
基于PyQt的YOLOv5+DeepSORT可视化界面,可实现目标跟踪、模型更换、结果保存和轨迹隐藏等功能。
yolo·目标跟踪·pyqt
TRACER~8510 天前
项目实战:pyqt6实现拼豆图纸生成器
python·pyqt
龙腾AI白云19 天前
大模型Prompt实战:精准生成专业技术文档
plotly·pyqt·fastapi·tornado·dash
CodebySandwich23 天前
QWidget转化为matplotlib绘图窗体
pyqt
懷淰メ23 天前
python3GUI---基于PyQt5+YOLOv8+DeepSort的智慧行车可视化系统(详细介绍)
开发语言·yolo·计算机视觉·pyqt·yolov8·deepsort·车距
:mnong24 天前
附图报价系统设计分析2
python·pyqt·openvino