PyQt5系列-网红辞职小程序-[1]

开个坑,关于PyQt5的一系列文章。

一、背景

作为快乐的程序员,当然要有一个快乐辞职方式,先看看demo:
程序员正确的辞职方式
今天我们学着用PyQt5来写一个类似的小程序吧!

展示

动画 00_00_00-00_00_30~1.gif

二、需求拆解

功能分解:
1.主窗口有两个按钮:同意和拒绝;
2.点击同意弹出界面,点击拒绝随机移动主窗口。

三、代码设计

3.1布局主窗口

class CMainWindow(QtWidgets.QWidget):

    def __init__(self, p=None):
        QtWidgets.QWidget.__init__(self, p)
        self._init_ui()

    def _init_ui(self):
        """
        功能:生成两个按钮
        """
        self.setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT)
        self.setWindowTitle("离职批准")
        layout = QtWidgets.QHBoxLayout()
        self.setLayout(layout)
        btn_accept = QtWidgets.QPushButton(self)  # 同意按钮
        btn_accept.setText("同意")
        layout.addWidget(btn_accept)
        btn_accept.clicked.connect(self._click_accept)
        btn_reject = QtWidgets.QPushButton(self)  # 拒绝按钮
        btn_reject.setText("拒绝")
        btn_reject.clicked.connect(self._click_reject)
        layout.addWidget(btn_reject)

3.2同意按钮

点击弹出按钮,回调函数弹出感谢窗口

    def _click_accept(self):
        """
        功能:点击同意
        """
        reply = QtWidgets.QMessageBox.information(
            self, '已批准', '谢谢领导批准!', QtWidgets.QMessageBox.Yes)
        if reply:
            self.close()

3.3拒绝按钮

点击拒绝按钮,回调移动窗口函数

    def _click_reject(self):
        """
        功能:点击拒绝
        """
        self._move_randomly()

3.4主窗口随机移动

    def _move_randomly(self):
        """
        功能:随机移动
        """
        desktop = QtWidgets.QDesktopWidget()
        geo = desktop.availableGeometry()  # 获取工作屏幕的大小参数

        def get_random_pos():
            """
            :return:返回在屏幕上的随机一个点
            """
            pos_x = int(random.random() * geo.width())
            pos_y = int(random.random() * geo.height())
            return (pos_x, pos_y)

        def get_pos():
            """
            :return:返回一个不在当前窗口内的点
            """
            x, y = get_random_pos()
            while self.geometry().contains(QtCore.QPoint(x, y)):
                x, y = get_random_pos()
            return (x, y)

        self.resize(WINDOW_WIDTH, WINDOW_HEIGHT)
        self.move(*get_pos())

源代码

import random
from PyQt5 import QtWidgets
from PyQt5 import QtCore


WINDOW_WIDTH = 500
WINDOW_HEIGHT = 200


class CMainWindow(QtWidgets.QWidget):

    def __init__(self, p=None):
        QtWidgets.QWidget.__init__(self, p)
        self._init_ui()

    def _init_ui(self):
        """
        功能:生成两个按钮
        """
        self.setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT)
        self.setWindowTitle("离职批准")
        layout = QtWidgets.QHBoxLayout()
        self.setLayout(layout)
        btn_accept = QtWidgets.QPushButton(self)  # 同意按钮
        btn_accept.setText("同意")
        layout.addWidget(btn_accept)
        btn_accept.clicked.connect(self._click_accept)
        btn_reject = QtWidgets.QPushButton(self)  # 拒绝按钮
        btn_reject.setText("拒绝")
        btn_reject.clicked.connect(self._click_reject)
        layout.addWidget(btn_reject)

    def _click_accept(self):
        """
        功能:点击同意
        """
        reply = QtWidgets.QMessageBox.information(
            self, '已批准', '谢谢领导批准!', QtWidgets.QMessageBox.Yes)
        if reply:
            self.close()

    def _click_reject(self):
        """
        功能:点击拒绝
        """
        self._move_randomly()

    def _move_randomly(self):
        """
        功能:随机移动
        """
        desktop = QtWidgets.QDesktopWidget()
        geo = desktop.availableGeometry()  # 获取工作屏幕的大小参数

        def get_random_pos():
            """
            :return:返回在屏幕上的随机一个点
            """
            pos_x = int(random.random() * geo.width())
            pos_y = int(random.random() * geo.height())
            return (pos_x, pos_y)

        def get_pos():
            """
            :return:返回一个不在当前窗口内的点
            """
            x, y = get_random_pos()
            while self.geometry().contains(QtCore.QPoint(x, y)):
                x, y = get_random_pos()
            return (x, y)

        self.resize(WINDOW_WIDTH, WINDOW_HEIGHT)
        self.move(*get_pos())


def main():
    app = QtWidgets.QApplication([])
    main_window = CMainWindow()
    main_window.show()
    app.exec_()


if __name__ == "__main__":
    main()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容