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)

运行结果:

相关推荐
云空12 小时前
《QtPy:Python与Qt的完美桥梁》
开发语言·python·qt·pyqt
云空2 天前
《PyQt6-3D应用开发技术文档》
3d·pyqt
sword devil9002 天前
PYQT实战:无刷电机模拟(只是模拟,没有写接口接收外部数据)
pyqt
sword devil9005 天前
PYQT实战:智能家居中控
python·智能家居·pyqt
OICQQ6765800810 天前
创建一个基于YOLOv8+PyQt界面的驾驶员疲劳驾驶检测系统 实现对驾驶员疲劳状态的打哈欠检测,头部下垂 疲劳眼睛检测识别
yolo·pyqt·疲劳驾驶·检测识别·驾驶员检测·打哈欠检测·眼睛疲劳
小灰灰搞电子19 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
越甲八千20 天前
pyqt 简单条码系统
数据库·microsoft·pyqt
重生之我在厦门做测试22 天前
基于pyqt开发串口和对应映射值(path)的显示工具
pyqt
hvinsion25 天前
【开源解析】基于Python+Qt打造智能应用时长统计工具 - 你的数字生活分析师
python·pyqt·开源软件·应用时长统计
毕设做完了吗?1 个月前
基于YOLOv8+Deepface的人脸检测与识别系统
python·yolo·毕业设计·pyqt