yuwan1994 2022-08-10 16:05 采纳率: 66.7%
浏览 33
已结题

Pyqt5 实现窗口居中会闪一下

pyqt5 实现窗口居中会闪一下

实现窗口居中的代码

import sys
from PyQt5.QtWidgets import QGridLayout, QLabel, QDesktopWidget, QMainWindow, QMdiArea, QApplication


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.widget = QMdiArea()  # 设置一个多文档区域为中心控件
        self.setCentralWidget(self.widget)  # 设置窗口中心的控件, QMainWindow不能设置布局(使用setLayout()方法),因为它有自己的布局
        self.grid_layout = QGridLayout()  # 格子布局

        self.label = QLabel()
        self.label.setText("PyQt5官方文档")
        self.label.setOpenExternalLinks(True)  # 设置打开外部链接
        self.grid_layout.addWidget(self.label, 0, 0)
        # 省略此处添加N多控件的代码

        # 设置窗体元素的排列方式
        self.widget.setLayout(self.grid_layout)

        self.window_center_show()

    def window_center_show(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2))
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())
之前的想法是,添加了所有控件后先居中再显示。实现起来发现实际上并没有居中显示。在调试模式中发现,在居中前不显示窗口,查询出来的窗口的尺寸是1280×720,居中前显示窗口,查询窗口的尺寸是640×480。由此表现找到问题,在窗口添加好所有的控件后,必须要显示窗口才能得到窗口的实际尺寸,但是这样就会造成运行程序后闪一下。

修改后的代码


# 其余不变只需要将self.show()放在获取尺寸的前面就可以了
    def window_center_show(self):
        self.show()
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2))
期望哪位能指点一下有什么办法,可以不闪那一下
  • 写回答

2条回答 默认 最新

  • yuwan1994 2022-08-10 16:16
    关注

    self.show()更换成self.adjustSize()就完美解决了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计