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


    问题代码(例)

    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_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    运行结果:

    在这里插入图片描述
    在这里插入图片描述

    如以上运行结果所示,点击按钮后,按钮连接的槽函数开始运行,控制台打印结果,但是Frame窗口上并未出现Label标签。

    原因和解决方法

    原因是:在构建QFrame窗体时就已经写入了窗体可视化,窗口在创建后直接被绘制,使得后面的组件放置后不可见。

    解决方法:

    1. 在创建窗体的后隐藏窗体,在组件全部构建完成后添加回来。
        # 设置主窗口组件
        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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    运行结果:
    点击按钮后出现Frame窗体

    在这里插入图片描述

    1. 在槽函数中实现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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行结果:

    在这里插入图片描述

  • 相关阅读:
    时序预测 | MATLAB实现DBN深度置信网络时间序列预测
    题解:P9426 [蓝桥杯 2023 国 B] 抓娃娃
    【动态规划】leetcode 63. 不同路径 II
    什么是DC?DC和AC的区别是什么?
    9种 Vuejs 常用事件修饰符与使用指南
    提高内外部协同效率的软件
    Linux高性能服务器编程 学习笔记 第六章 高级IO函数
    Windows 10 IoT Enterprise 2019 LTSC High End OEM Software 详细介绍
    中小型企业云存储选型指南:要点与建议
    1. 云计算简介
  • 原文地址:https://blog.csdn.net/Oh_Python/article/details/134391338