鱼C论坛

 找回密码
 立即注册
查看: 313|回复: 3

将qt designer生成的UI文件转换成代码后,运行时出现了一闪而过的白色画面

[复制链接]
发表于 2024-6-17 22:16:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
显示展示一个白色的页面,停顿一会儿后才出现我想要的页面, 请问是什么问题导致,求大佬帮助,代码如下
# -*- coding: utf-8 -*-
import sys

# Form implementation generated from reading ui file '.\projectpage.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_projectpage(object):
    def setupUi(self, projectpage):
        projectpage.setObjectName("projectpage")
        projectpage.resize(1018, 781)
        self.horizontalLayout = QtWidgets.QHBoxLayout(projectpage)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.widget = QtWidgets.QWidget(projectpage)
        self.widget.setStyleSheet("background-color: rgb(39, 39, 39);")
        self.widget.setObjectName("widget")
        self.widget.resize(1018, 781)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setGeometry(QtCore.QRect(30, 40, 201, 111))
        self.pushButton.setMinimumSize(QtCore.QSize(201, 111))
        self.pushButton.setStyleSheet("background-color: rgb(50, 50, 50);")
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.widget)

        self.retranslateUi(projectpage)
        QtCore.QMetaObject.connectSlotsByName(projectpage)

    def retranslateUi(self, projectpage):
        _translate = QtCore.QCoreApplication.translate
        projectpage.setWindowTitle(_translate("projectpage", "Form"))
        self.pushButton.setText(_translate("projectpage", "PushButton"))
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_projectpage()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-17 22:19:32 | 显示全部楼层
你好呀!很高兴能帮助你解决这个问题。你遇到的问题大概是因为在设置背景颜色时,使用的窗口层级不正确。更具体地说,你设置背景颜色的`widget`可能并未完全覆盖整个主窗口,导致一开始的白色页面出现在主窗口显示之前。

我们可以尝试以下方法来解决这个问题:

1. 直接对子窗口进行背景颜色设置。
2. 确保`widget`覆盖了整个主窗口。

以下是修改后的代码示例:
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_projectpage(object):
    def setupUi(self, projectpage):
        projectpage.setObjectName("projectpage")
        projectpage.resize(1018, 781)
        projectpage.setStyleSheet("background-color: rgb(39, 39, 39);")  # 设置主窗口背景颜色

        self.horizontalLayout = QtWidgets.QHBoxLayout(projectpage)
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.pushButton = QtWidgets.QPushButton(projectpage)
        self.pushButton.setGeometry(QtCore.QRect(30, 40, 201, 111))
        self.pushButton.setMinimumSize(QtCore.QSize(201, 111))
        self.pushButton.setStyleSheet("background-color: rgb(50, 50, 50);")
        self.pushButton.setObjectName("pushButton")

        self.horizontalLayout.addWidget(self.pushButton)  # 将按钮直接加入到主窗口的布局中

        self.retranslateUi(projectpage)
        QtCore.QMetaObject.connectSlotsByName(projectpage)

    def retranslateUi(self, projectpage):
        _translate = QtCore.QCoreApplication.translate
        projectpage.setWindowTitle(_translate("projectpage", "Form"))
        self.pushButton.setText(_translate("projectpage", "PushButton"))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_projectpage()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

在这个版本中,我直接将背景颜色设置为主窗口`projectpage`,并将按钮加入到主窗口的布局中,不再使用额外的`widget`来包裹按钮。这应该解决你所描述的“一闪而过的白色画面”的问题。

祝你编程愉快,如果有更多问题,尽管问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-18 15:02:21 | 显示全部楼层
FishC 发表于 2024-6-17 22:19
你好呀!很高兴能帮助你解决这个问题。你遇到的问题大概是因为在设置背景颜色时,使用的窗口层级不正确。更 ...

还是不行,从一开始先设置背景在调用还是一样的会出现白色屏幕的闪烁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-18 15:02:44 | 显示全部楼层
熊天天 发表于 2024-06-18 15:02
还是不行,从一开始先设置背景在调用还是一样的会出现 ...


明白了,我们来进一步优化看看。通常情况下,闪烁的问题可能和布局刷新以及窗口初始显示有关。我们可以尝试使用一些优化技巧来避免这些问题,如在构造窗口对象之前先隐藏它,设置好背景颜色后再显示窗口。

下面是修改后的代码:
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_projectpage(object):
    def setupUi(self, projectpage):
        projectpage.setObjectName("projectpage")
        projectpage.resize(1018, 781)

        # 隐藏窗口,防止一开始的白屏闪烁
        projectpage.hide()

        # 设置主窗口背景颜色
        projectpage.setStyleSheet("background-color: rgb(39, 39, 39);")

        self.horizontalLayout = QtWidgets.QHBoxLayout(projectpage)
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.pushButton = QtWidgets.QPushButton(projectpage)
        self.pushButton.setGeometry(QtCore.QRect(30, 40, 201, 111))
        self.pushButton.setMinimumSize(QtCore.QSize(201, 111))
        self.pushButton.setStyleSheet("background-color: rgb(50, 50, 50);")
        self.pushButton.setObjectName("pushButton")

        self.horizontalLayout.addWidget(self.pushButton)  # 将按钮直接加入到主窗口的布局中

        self.retranslateUi(projectpage)
        QtCore.QMetaObject.connectSlotsByName(projectpage)

        # 设置完成后再显示窗口
        projectpage.show()

    def retranslateUi(self, projectpage):
        _translate = QtCore.QCoreApplication.translate
        projectpage.setWindowTitle(_translate("projectpage", "Form"))
        self.pushButton.setText(_translate("projectpage", "PushButton"))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_projectpage()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

这次我们在设置窗口属性之前先将窗口隐藏,等所有设置操作完成后再显示窗口。这种方式应该能够有效避免白色画面的闪烁问题。

另外,如果这个方法还是不行,请确保你使用的是最新的PyQt版本,有时库的问题也会引起类似的问题。如果问题依然存在,我们可能需要更精细地分析具体的运行环境和代码结构,逐步排查原因。

希望这次能帮到你,有任何问题请随时告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表