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)

运行结果:

相关推荐
青铜发条10 小时前
【Qt】PyQt、原生QT、PySide6三者的多方面比较
开发语言·qt·pyqt
Goona_2 天前
pyqt+python之二进制生肖占卜
pyqt
大学生毕业题目4 天前
毕业项目推荐:83-基于yolov8/yolov5/yolo11的农作物杂草检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·杂草识别
凯子坚持 c7 天前
当Python遇见高德:基于PyQt与JS API构建桌面三维地形图应用实战
javascript·python·pyqt·高德地图
Goona_8 天前
pyqt+Python证件号智能校验工具
pyqt
大学生毕业题目9 天前
毕业项目推荐:52-基于yolov8/yolov5/yolo11的红绿灯检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·红绿灯检测
大学生毕业题目9 天前
毕业项目推荐:64-基于yolov8/yolov5/yolo11的蝴蝶种类检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·蝴蝶检测
大学生毕业题目9 天前
毕业项目推荐:51-基于yolov8/yolov5/yolo11的反光衣检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·反光衣检测
深兰科技11 天前
柳州市委常委、统战部部长,副市长潘展东率队首访深兰科技集团新总部,共探 AI 赋能制造大市与东盟合作新局
人工智能·beautifulsoup·numpy·pyqt·matplotlib·pygame·深兰科技