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

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 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示