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)

运行结果:

相关推荐
狮子雨恋2 天前
【无标题】
pyqt
微小冷4 天前
pyqt+matplotlib多进程图像刷新
pyqt·matplotlib·进程通信·多进程·queue·process
千里码aicood5 天前
PyQt基于卷积神经网络的智慧校园的设计与实现
人工智能·cnn·pyqt
千里码aicood5 天前
基于PyQt心理咨询机器人智能系统的设计与实现
机器人·pyqt
典典分享指南5 天前
Windows 自动化踩坑实录
python·intellij-idea·pyqt·emacs·visual studio
深蓝海拓8 天前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
智购科技自动售卖机厂家11 天前
2026自动售货机OTA升级系统设计:从全量升级到差分升级的带宽优化工程实践~YH
大数据·人工智能·numpy·pyqt·fastapi
【赫兹威客】浩哥11 天前
【无标题】
python·spring·django·pyqt
小灰灰搞电子12 天前
PyQt QTextBoundaryFinder类详解:精准定位文本边界
pyqt
小灰灰搞电子13 天前
PyQt 实现自己的桌面萌宠源码分享
pyqt