PyQt5-如何设置主窗口居中?退出应用程序如何操作?

1 如何实现主窗口居中显示?

  • 让主窗口居中,其实就是让窗口的左右边缘到左右屏幕距离相等,让窗口的上下边缘到上下屏幕的距离相等;
  • 主要是需要进行计算和移动工作;
  • 可以使用 QDesktopWidget 类来获取屏幕的大小和位置信息,然后根据这些信息计算出窗口的位置和大小;
  • QDesktopWidget().screenGeometry()可以获取到屏幕坐标:
python 复制代码
    def screenGeometry(self, *__args): # real signature unknown; restored from __doc__ with multiple overloads
        """
        screenGeometry(self, screen: int = -1) -> QRect
        screenGeometry(self, QWidget) -> QRect
        screenGeometry(self, QPoint) -> QRect
        """
        pass
  • 具体步骤如下:

1.1 获取屏幕坐标

  • 首先获取到屏幕坐标系:
python 复制代码
screen = QDesktopWidget().screenGeometry()

1.2 获取窗口坐标

  • 使用geometry()方法获取到当前窗口的坐标:
python 复制代码
size = self.geometry()

1.3 居中计算

  • 然后进行计算,屏幕坐标减窗口坐标对应计算:
python 复制代码
l = (screen.width() - size.width()) / 2
t = (screen.height() - size.height()) / 2

1.4 移动位置

  • 最后就是移动窗口到计算好的位置即可:
python 复制代码
self.move(l, t)

1.5 完整代码

python 复制代码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/2 
# 文件名称:test021_CenterForm.py
# 作用:窗口居中
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QDesktopWidget


class CenterForm(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("标准窗口")
        self.resize(500, 400)

    def center(self):
        # 获得屏幕坐标
        screen = QDesktopWidget().screenGeometry()
        # 获取窗口坐标系
        size = self.geometry()
        l = (screen.width() - size.width()) / 2
        t = (screen.height() - size.height()) / 2
        self.move(l, t)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = CenterForm()
    win.show()
    sys.exit(app.exec_())

1.6 效果演示

2 如何退出应用程序?

2.1 使用按钮退出

  • 我们预期是使用一个按钮来点击后退出应用程序;
  • 之前我们使用的Qt Designer来实现的,主要是可视化操作;
  • 现在我们使用代码来实现看看效果;
  • 先添加一个按钮:
python 复制代码
self.button = QPushButton("点击按钮")

2.2 信号与槽绑定

  • 把按钮的点击操作和槽进行绑定;
  • 后边会定义一个按钮点击事件;
python 复制代码
self.button.clicked.connect(self.on_click)

2.3 布局和增加按钮

  • 把设置的按钮添加到窗口中,并设置布局等操作;
python 复制代码
lay = QHBoxLayout()
lay.addWidget(self.button)

mframe = QWidget()
mframe.setLayout(lay)

self.setCentralWidget(mframe)

2.4 定义一个按钮事件

  • 定义一个按钮事件,即退出事件;
python 复制代码
    def on_click(self):
        # 获取对象信号
        s = self.sender()
        print(s.text() + " 应用程序已经退出")
        app = QApplication.instance()
        app.quit()

2.5 完整代码

python 复制代码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/2 
# 文件名称:test022_QuitAPP.py
# 作用:退出应用程序
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QWidget, QPushButton

class QuitAPP(QMainWindow):
    def __init__(self):
        super(QuitAPP, self).__init__()
        # 窗口尺寸
        self.resize(500, 400)
        # 窗口标题
        self.setWindowTitle("验证应用程序的退出")

        # 设置一个按钮
        self.button = QPushButton("点击按钮")

        # 信号与槽关联
        self.button.clicked.connect(self.on_click)

        # 水平布局
        lay = QHBoxLayout()
        lay.addWidget(self.button)

        # 增加按钮
        mframe = QWidget()
        mframe.setLayout(lay)

        self.setCentralWidget(mframe)

    # 按钮事件
    def on_click(self):
        # 获取对象信号
        s = self.sender()
        print(s.text() + " 应用程序已经退出")
        app = QApplication.instance()
        app.quit()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QuitAPP()
    win.show()
    sys.exit(app.exec_())

2.6 效果演示

  • 点击按钮后输入以下信息:
python 复制代码
D:\Python37\python.exe F:/pyqt_study/test_case/test022_QuitAPP.py
点击按钮 应用程序已经退出
相关推荐
数据智能老司机1 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 小时前
drf初步梳理
python·django
每日AI新事件1 小时前
python的异步函数
python
这里有鱼汤2 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook11 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室12 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三13 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
用户25191624271117 小时前
Python之语言特点
python