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))