跳至主要內容

python表白程序

知识库编程技巧Pythonpython大约 8 分钟

效果图

图片素材

和脚本同级目录即可

img_3.pngrose.png

python 脚本

python main.pyopen in new window

import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QFont, QIcon
from PyQt5 import QtGui, QtCore
import random

############################
# 本地调试 执行命令 python main.py
# 打包exe文件 执行 pyinstaller -F -w main.py
# 打包完成后 dist/main.exe 将图片(img_3.png、rose.png)复制到exe文件同级,windows下双击exe文件,查看效果
############################

class MessageBox(QtWidgets.QWidget):
    CloseAllowed = 0
    GirlName = "姑娘"

    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self)  # 因为继承关系,要对父类初始化
        # 通过super初始化父类,__init__()函数无self,若直接QtWidgets.QWidget.__init__(self),括号里是有self的
        # setGeometry()方法完成两个功能--设置窗口在屏幕上的位置和设置窗口本身的大小。它的前两个参数是窗口在屏幕上的x和y坐标。后两个参数是窗口本身的宽和高
        self.setGeometry(300, 300, 800, 600)
        # self.resize(1000, 500) # 设置窗体大小,本行可有可无。
        self.center()  # 自定义一个居中的函数
        self.setFixedSize(self.width(), self.height())  # PyQT禁止调整窗口大小和窗口最大化按钮
        # self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)#PyQT禁止窗口最大化按钮和关闭按钮
        self.setWindowTitle(self.GirlName+u',爱你哟')  # 仅仅设置窗体标题,不设置位置。
        # 调用QIcon构造函数时,我们需要提供要显示的图标的路径(相对或绝对路径)。同时注意:使用QIcon类型必须导入此模块from PyQt5.QtGui import QIcon
        self.setWindowIcon(QIcon('rose.png'))
        self.setToolTip(self.GirlName+u",爱你哟")  # 调用setToolTip()方法,该方法接受富文本格式的参数,css之类。
        QtWidgets.QToolTip.setFont(QFont('华文楷体', 10))  # 设置字体以及字体大小
        self.label1 = QtWidgets.QLabel(u'<b>' + self.GirlName + u',观察你很久了!</b>', self)  # 建立一个标签
        self.label1.move(150, 40)  # 使此标签移动到这个部件(260,40)的位置
        self.label1.setFont(QFont("Timers", 20))  # 设置字体与字体大小
        self.label2 = QtWidgets.QLabel(u'<b>你爱我吗?</b>', self)  # 建立一个标签
        self.label2.move(150, 100)  # 使此标签移动到这个部件(260,100)的位置
        self.label2.setFont(QFont("Timers", 20))  # 设置字体与字体大小

        # Qt中提供的调色板QPalette类就是专门用于管理控件的外观显示。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色。
        # 每个窗体和控件都包含一个QPalette对象,在显示时,对其做相应的设置即可
        self.window_pale = QtGui.QPalette()  # 实例化QPalette类
        self.window_pale.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap("img_3.png")))
        self.setPalette(self.window_pale)
        # setStyleSheet来设置图形界面的外观

        # 因为需要增加按钮,所以我们引入了QPushButton类,该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的
        self.buttonOK = QtWidgets.QPushButton(u'爱', self)
        self.buttonOK.setFocusPolicy(QtCore.Qt.NoFocus)
        self.buttonOK.move(150, 500)
        self.buttonOK.clicked.connect(self.showDialogOK)

        # 因为需要增加按钮,所以我们引入了QPushButton类,该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的
        self.buttonE = QtWidgets.QPushButton(u'考虑考虑', self)
        self.buttonE.setFocusPolicy(QtCore.Qt.NoFocus)
        # Qt::TabFocus 0x1 接受Tab键焦点
        # Qt::ClickFocus 0x2 接受鼠标单击做焦点
        # Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab键和鼠标单击做焦点
        # Qt::WheelFocus StrongFocus | 0x4 滑轮作为焦点选中事件
        # Qt::NoFocus 0 不接受焦点
        self.buttonE.move(400, 500)  # move()方法来指定部件的放置坐标,坐标的顶点就是窗口的左上角
        self.buttonE.clicked.connect(self.showDialogEE)

        # 因为需要增加按钮,所以我们引入了QPushButton类,该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的
        self.buttonNO = QtWidgets.QPushButton(u'不爱', self)
        self.buttonNO.setFocusPolicy(QtCore.Qt.NoFocus)  # 按钮无焦点
        # Qt::TabFocus 0x1 接受Tab键焦点
        # Qt::ClickFocus 0x2 接受鼠标单击做焦点
        # Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab键和鼠标单击做焦点
        # Qt::WheelFocus StrongFocus | 0x4 滑轮作为焦点选中事件
        # Qt::NoFocus 0 不接受焦点
        self.buttonNO.move(650, 500)  # move()方法来指定部件的放置坐标,坐标的顶点就是窗口的左上角
        self.buttonNO.clicked.connect(self.showDialogNO)

    def showDialogOK(self):
        QtWidgets.QMessageBox.information(self, "欧耶", "爱你,么么么么么么么哒~~~", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "温柔给你", "清晨的微笑给你,深夜的晚安给你,情话给你,余生给你全都给你…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "微笑给你", "夏天的微风,是你冬天的暖阳,是你思念是你,挚爱是你,余生全是你…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "微笑给你", "夏天的微风,是你冬天的暖阳,是你思念是你,挚爱是你,余生全是你…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "我喜欢你", "我喜欢你,像风走了八千里,不知疲倦不问归期。", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "我喜欢你", "我喜欢你,像风走了八千里,不曾歇息满心欢喜。", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "我喜欢你", "我喜欢你,像风走了八千里,柳动蝉鸣日落潮汐。", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "我喜欢你", "我喜欢你,像风走了八千里,不知所起相思成疾", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "害羞", "别着急慢慢看~余生还很长~", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "等你", "等到秋风起,等到落叶纷飞……", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "等你", "等到冰天雪地,等到银丝白发,等到生命轮回…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "等你", "再问问心底,你的他依然忘不掉你…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "贪你", "我贪念的人间烟火,不偏不倚全部都是你…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "害羞", "别着急慢慢看~余生还很长~", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "关于你", "你每次坐在我的身旁,内心总是不由自主充满了快乐……", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "关于你", "脸上总是不由自主洋溢着幸福,嘴角总是不由自主的上扬…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "关于你", "那一刻是那样的安心和平静,让我无端的想到了永远…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "我爱你,像一场温柔自己的梦中醒来,只留叹息…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "我爱你,像雨滴落在绿苔红泥上,柔软散去…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "我爱你,像星光坠入眸里,一眼万里…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "我爱你,像风追着云不问所以,我还是很喜欢你……", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?星河滚烫, 你是人间理想.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?皓月清凉, 你是人间曙光.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?人海冷漠, 你是人间炽热.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?满眼星河, 你是清风满月.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?万事沉浮, 你是人间归途.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?众生平庸, 你是人间星光.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?世间无常, 你是人间琳琅.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?满树繁华, 你是心之所往.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?明月黯淡, 你是最后曙光.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?山花烂漫, 你是昨夜晓凤.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?人间苦咸, 你是甜中透糖.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?浩瀚银河, 你是华星秋月.", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?你是随机播放的惊喜,是单曲循环的执念……", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "爱你", "你知道吗?是惊鸿一瞥的惊艳,是目不转睛的迷恋…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "害羞", "不要着急嘛,慢慢欣赏", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "关于你", "有关想和你做的事,与你浪漫,不止这个冬天", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "关于你", "我喜欢你就像星星会永远陪着月亮的那种,想你的时候,月亮都是温柔的,想握住整个星河,悄悄赠你满天星火…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "给你", "我喜欢春天的风,夏天的雨,秋天的落叶,冬天的飘雪。但是都抵不住你回眸看我时那眼角带笑的样子…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "给你", "能给你的不多,单纯的喜欢,数不尽的温柔,全给你…", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "怕你烦", "爱你爱你爱你~~~~~", QtWidgets.QMessageBox.Ok)
        self.CloseAllowed = 1

    def showDialogEE(self):
        QtWidgets.QMessageBox.information(self, "别纠结了", "你是爱我的对不对?", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "我看到你的心了,真的好爱我……", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "别不好意思嘛", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "我爱你呢,你知道吗?", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "很爱你很爱你", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "很爱你很爱你", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "你不爱我的话我会生气的后果很严重", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "很爱你很爱你", QtWidgets.QMessageBox.Ok)
        QtWidgets.QMessageBox.information(self, "别纠结了", "我好爱你啊~~~啊啊啊啊啊~~~么么~~", QtWidgets.QMessageBox.Ok)
    def showDialogNO(self):
        self.q = random.randint(0, 450)  # 在0-650内生成随机的X坐标
        self.w = random.randint(150, 450)  # 在150-650内生成随机的Y坐标
        self.buttonNO.move(self.q, self.w)

    # 当我们关闭一个窗口时,在PyQt中就会触发一个QCloseEvent的事件,正常情况下会直接关闭这个窗口,
    # 但是我们不希望这样的事情发生,所以我们需要重新定义QCloseEvent,函数名称为closeEvent不可变
    def closeEvent(self, event):  # 函数名固定不可变
        if self.CloseAllowed == 1:
            event.accept()  # 关闭窗口
        else:
            QtWidgets.QMessageBox.information(self, "未作回应", self.GirlName + ",请不要逃避!", QtWidgets.QMessageBox.Ok)
            event.ignore()  # 忽视点击X事件

    def center(self):
        screen = QtWidgets.QDesktopWidget().screenGeometry()  # 获取屏幕分辨率
        size = self.geometry()  # 获取窗口尺寸
        self.move((screen.width() - size.width()) / 2,(screen.height() - size.height()) / 2)  # 利用move函数窗口居中

app = QtWidgets.QApplication(sys.argv)
window = MessageBox()
window.show()
sys.exit(app.exec_())