鱼C论坛

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

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

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

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

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

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

  1. # -*- coding: utf-8 -*-
  2. import sys

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


  9. from PyQt5 import QtCore, QtGui, QtWidgets


  10. class Ui_projectpage(object):
  11.     def setupUi(self, projectpage):
  12.         projectpage.setObjectName("projectpage")
  13.         projectpage.resize(1018, 781)
  14.         self.horizontalLayout = QtWidgets.QHBoxLayout(projectpage)
  15.         self.horizontalLayout.setObjectName("horizontalLayout")
  16.         self.widget = QtWidgets.QWidget(projectpage)
  17.         self.widget.setStyleSheet("background-color: rgb(39, 39, 39);")
  18.         self.widget.setObjectName("widget")
  19.         self.widget.resize(1018, 781)
  20.         self.pushButton = QtWidgets.QPushButton(self.widget)
  21.         self.pushButton.setGeometry(QtCore.QRect(30, 40, 201, 111))
  22.         self.pushButton.setMinimumSize(QtCore.QSize(201, 111))
  23.         self.pushButton.setStyleSheet("background-color: rgb(50, 50, 50);")
  24.         self.pushButton.setObjectName("pushButton")
  25.         self.horizontalLayout.addWidget(self.widget)

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

  28.     def retranslateUi(self, projectpage):
  29.         _translate = QtCore.QCoreApplication.translate
  30.         projectpage.setWindowTitle(_translate("projectpage", "Form"))
  31.         self.pushButton.setText(_translate("projectpage", "PushButton"))
  32. if __name__ == '__main__':
  33.     app = QtWidgets.QApplication(sys.argv)
  34.     MainWindow = QtWidgets.QMainWindow()
  35.     ui = Ui_projectpage()
  36.     ui.setupUi(MainWindow)
  37.     MainWindow.show()
  38.     sys.exit(app.exec_())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

以下是修改后的代码示例:

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. from PyQt5 import QtCore, QtGui, QtWidgets

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

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

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

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

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

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

  23. if __name__ == '__main__':
  24.     app = QtWidgets.QApplication(sys.argv)
  25.     MainWindow = QtWidgets.QMainWindow()
  26.     ui = Ui_projectpage()
  27.     ui.setupUi(MainWindow)
  28.     MainWindow.show()
  29.     sys.exit(app.exec_())
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

还是不行,从一开始先设置背景在调用还是一样的会出现白色屏幕的闪烁
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

下面是修改后的代码:

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. from PyQt5 import QtCore, QtGui, QtWidgets

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

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

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

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

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

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

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

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

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

  28. if __name__ == '__main__':
  29.     app = QtWidgets.QApplication(sys.argv)
  30.     MainWindow = QtWidgets.QMainWindow()
  31.     ui = Ui_projectpage()
  32.     ui.setupUi(MainWindow)
  33.     MainWindow.show()
  34.     sys.exit(app.exec_())
复制代码


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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