熊天天 发表于 2024-6-17 22:16:10

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

显示展示一个白色的页面,停顿一会儿后才出现我想要的页面, 请问是什么问题导致,求大佬帮助,代码如下

# -*- 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_())

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

熊天天 发表于 2024-6-18 15:02:21

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

还是不行,从一开始先设置背景在调用还是一样的会出现白色屏幕的闪烁

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 将qt designer生成的UI文件转换成代码后,运行时出现了一闪而过的白色画面