大数跨境
0
0

Python的花式表白—程序猿的“专属浪漫”

Python的花式表白—程序猿的“专属浪漫” 数据皮皮侠
2019-11-09
1
导读:我的意中人是个盖世英雄,我知道有一天,他会在一个万众瞩目的情况下出现,身披金甲圣衣,脚踏七彩祥云来娶我!


我的意中人是个盖世英雄,我知道有一天,他会在一个万众瞩目的情况下出现,身披金甲圣衣,脚踏七彩祥云来娶我!

——紫霞仙子《大话西游》


紫霞仙子的意中人,会在万众瞩目的情况下,脚踏七彩祥云而至,而生活中的你,你的意中人又在哪里?是不是有很多爱意,因为羞涩而不敢开口;是不是总是在表白的时候,担心被拒绝而内心忐忑不安;是不是总是找不到合适的表白方法!没关系!!只要学会了这个表白神器,妈妈再也不用担心你!Python的花式表白,一个程序猿的“专属浪漫”,你准备好了吗?


(一)效果预览

说了半天,你一定还半信半疑吧,那让我们先来看看最后的成品效果图


(1) 程序的运行结束后,会生成一个exe文件,打开之后,如图所示,这个文本框的全部东西都是可以设置的,包括背景图片,文字内容,由于我比较喜欢《大话西游》,所以我选择了她作为背景照片。窗口下方有三个选择按钮,对应着她对你的表白的回答,包括“同意,拒绝,考虑一下”当然你也可以把这三个词语换成近似意思的语句,开心就好。


(图1:大话西游版)

(图二:“欠打”版)


(2) 当你的女(男)神,想要直接通过点击窗口的关闭按钮来关闭这个文件时,文件不会被关闭,而是会弹出新的程序框,弹出的内容文字,你可以自行编辑,我的内容是“小姐姐,不要逃避!”,当然你也可以写其他更好玩的。但最终,他都是无法关闭的。效果如图:

(图三:“关闭窗口”示例)


(3) 当你的女(男)神,想要点击拒绝按钮时,整个“拒绝”按钮会消失,然后随机出现在程序框中的任意位置。当你再次点击时,他会再一次消失,然后随机出现。当然,这个是无限循环,如果你的女(男)神,有闲情逸致的话,他可以点上一个下午,那么你就要思考一下,你的问题了!是什么让他愿意点一下午的鼠标,也不愿意换个地方点击!

(图四:“拒绝”示例)


(4) 当你的女(男)神,点击“考虑一下”按钮时,会生成新的对话框,同样,对话框的文字内容是你事先设定的。我放了一些表情包上面的“土味情话”上去,比如:"别纠结了", "你完了,你妈让你嫁给我", "别纠结了,你已经是我的人了"等等。当然,你也可以选择一些更有趣的话语,或者是只有他懂的密语。效果预览图如图:

(图五:“考虑一下”示例)


(5) 该对话框的唯一关闭方式,是你的女(男)神点击“同意按钮”。点击之后,会生成新的对话框,该文本框的文字内容,宜表达你的喜悦之情“土味情话”就不失为一种好选择。哈哈哈,我在这里选择了“三行情书”里的金奖作品“螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。”之后,该对话框的关闭按钮就恢复正常了,此时,对话框可以被关闭。

(图六:“唯一关闭方式”示例)


警告:本程序使用具有一定风险性,切勿随意使用,以免给自己造成不必要的负担!切记!


当然,在互生情愫之时,此程序有暗送秋波、推波助澜之奇效,在其他阶段,产品效果符合随机游走,呈现“布朗运动”。

Ps:如果使用者,貌比潘安、或是沉鱼落雁,亦或是你有一个有趣的灵魂,本程序任何副作用与风险性


(二)神器的具体构建过程

怎么样?看完了效果图,是不是心动了,现在我们就来具体的操作一下,从头到尾的展示下该神器的构建过程!

Step 1:准备工作

首先,引入我们需要的库,python有许多的库,能够帮助我们更加快速轻松的进行编程,我们这里主要用到的是pyqt5,此外还需注意:QtWidgets不包含QFont必须调用QtGui。

import sysfrom PyQt5 import QtWidgetsfrom PyQt5.QtGui import QFont,QIconfrom PyQt5 import QtGui,QtCoreimport random

Step 2:初始化设置

①创建一个初始的类,这个类继承自父类QtWidgets.QWidget。注意:parent = None代表此QWidget属于最上层的窗口,也就是MainWindows.

②通过setGeometry()方法完成两个功能——设置窗口在屏幕上的位置和设置窗口本身的大小。它的前两个参数是窗口在屏幕上的x和y坐标。后两个参数是窗口本身的宽和高。运用QtWidgets.QToolTip.setFont(QFont()),设置字体以及字体大小。我设置的是“华文楷体”12号字。你可以根据你的喜好自行设置。

③紧接着,运用QtWidgets.QLabel()来引入标签。标签的内容文字可自行选择,本处我选择了一个“土味情话”,你可以写一些更加高大上的,符合语句要求即可。最后运用self.label1.move()来进行标签的定位。

class MessageBox(QtWidgets.QWidget):    CloseAllowed=0   def __init__(self,parent = None):                  QtWidgets.QWidget.__init__(self)           self.setGeometry(300, 300, 800,800)            self.center()           self.setFixedSize(self.width(),self.height());                              self.setWindowTitle(u'表白神器')            self.setWindowIcon(QIcon('rose.png'))                  self.setToolTip(u'Python')           QtWidgets.QToolTip.setFont(QFont('华文楷体', 12))           self.label1 = QtWidgets.QLabel(u'<b>知道我为什么要学游泳吗。</b>', self)                     self.label1.move(150, 40)            self.label1.setFont(QFont("Timers", 20));           self.label2= QtWidgets.QLabel(u'<b>因为我们马上要坠入爱河了,做我女朋友好吗?</b>', self)            self.label2.move(150, 100)            self.label2.setFont(QFont("Timers", 20));

④ Qt中提供的调色板QPalette类就是专门用于管理控件的外观显示,我们在这里运用它来进行背景色和图形颜色的初始化。

self.window_pale = QtGui.QPalette()   self.window_pale.setBrush(self.backgroundRole(),QtGui.QBrush(QtGui.QPixmap("biu.jpg"))) self.setPalette(self.window_pale)

⑤设置使用者回答问题的同意按钮。运用QtWidgets.QPushButton()设置“同意”、按钮。文字内容可以随意更改。我在这里将他修改为“我也喜欢你”。同时运用self.buttonOK.move()来定位。

self.buttonOK = QtWidgets.QPushButton(u'我也喜欢你',self)  self.buttonOK.setFocusPolicy(QtCore.Qt.NoFocus)self.buttonOK.move(50, 700) self.buttonOK.clicked.connect(self.showDialogOK)

⑥设置使用者回答问题的“考虑一下”按钮。运用QtWidgets.QPushButton()设置“考虑一下”按钮。文字内容可以随意更改。同时运用self.buttonOK.move()来定位。运用Qt.NoFocus,来响应鼠标操作。

self.buttonE = QtWidgets.QPushButton(u'考虑一下',self) self.buttonE.setFocusPolicy(QtCore.Qt.NoFocus) self.buttonE.move(330, 700)  self.buttonE.clicked.connect(self.showDialogEE)

⑦设置使用者回答问题的“拒绝”按钮。运用QtWidgets.QPushButton()设置“拒绝”按钮。文字内容可以随意更改。我将其修改为“你是好人”,你可以自行修改恰当的内容。同时运用self.buttonOK.move()来定位。运用Qt.NoFocus,来响应鼠标操作。

self.buttonNO = QtWidgets.QPushButton(u'你是好人',self) self.buttonNO.setFocusPolicy(QtCore.Qt.NoFocus) self.buttonNO.move(610, 700) self.buttonNO.clicked.connect(self.showDialogNO)

Step 3:二级窗口设置

①定义“同意”按钮的二级窗口函数 showDialogOK(),并输入指定内容,我这里选择的内容是“三行情书”大赛的金奖作品“螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。”,你可以自行选择更加合适或是你自己喜欢的语句进行表达。

def showDialogOK(self):    QtWidgets.QMessageBox.information(self, "偷心盗贼", "螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。", QtWidgets.QMessageBox.Ok)    self.CloseAllowed = 1

②定义“考虑一下”按钮的二级窗口函数 showDialogEE(),并输入指定内容,我这里选择的内容是“土味情话”系列。我们适当的增加了重复语句,增加回答的多样性,因为一般而言,使用者看到二级窗口且发现点击而二级窗口,并未关闭整个文件后,会继续进行不断的点击。更多的重复语句,可以让程序更加多样化,同时,当你的语句是连续的,可以形成一个故事,也更加增加趣味性。当然,你可以自行选择更加合适或是你自己喜欢的语句进行表达。譬如一个只有你和他知道的密语或者小故事。

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)

③定义“拒绝”按钮的二级窗口,定义函数 showDialogno()。这里我们借鉴最近网络上很火的“无法拒绝”按钮。即当你点击该按钮后,该按钮将“逃跑”,随机出现在对话框中的其他位置。这里我们选择运用 random.randint()来随机生成按钮的X,Y位置,然后生成新的按钮。

def showDialogNO(self):    self.q = random.randint(0, 650)      self.w = random.randint(150, 650)      self.buttonNO.move(self.q, self.w)

Step 4:针对于“关闭窗口按钮”功能的修改

当我们关闭一个窗口时,在PyQt中就会触发一个QCloseEvent的事件,正常情况下会直接关闭这个窗口,但是我们不希望这样的事情发生,所以我们需要重新定义QCloseEvent,函数名称为closeEvent不可变。因此我们选择 if 语句,运用event.ignore()来忽视鼠标的点击。同时,增加点击的二级窗口,运用QtWidgets.QMessageBox.information()来进行二级窗口的内容设定。在这里,我的内容设定为“未作回应,小姐姐,请不要逃避!”,你可以设定其他的语句。并通过self.move()语句来对二级窗口进行定位。

   def closeEvent(self,event):       if self.CloseAllowed==1:           event.accept()       else:           QtWidgets.QMessageBox.information(self, "未作回应", "小姐姐,请不要逃避!", QtWidgets.QMessageBox.Ok)           event.ignore()def center(self):       screen=QtWidgets.QDesktopWidget().screenGeometry()       size=self.geometry()       self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2app=QtWidgets.QApplication(sys.argv)window=MessageBox()window.show()sys.exit(app.exec_())

Step 5:文件包装

之前的四个步骤已经构建完善了全部的程序,最后一步就是将他包装成一个exe.文件,以便于发送和使用。因为你的运行结果是个脚本,无法发送,所以你需要将他包装为exe程序,然后就大功告成了!!

from PyInstaller.__main__ import runif __name__ == '__main__':   opts = ['Kobe.py', '-w', '--onefile']   run(opts)

(图7:左图为运行结果,右边是你可以发送给别人的exe程序)


大功告成,快去尝试一下吧!切记!本程序使用具有一定风险性,切勿随意使用,以免给自己造成不必要的负担!切记!当然,如果你貌比潘安、或是沉鱼落雁,亦或是你有一个有趣的灵魂,那么本程序无任何副作用与风险性!


(三)完整代码

import sysfrom PyQt5 import QtWidgetsfrom PyQt5.QtGui import QFont,QIconfrom PyQt5 import QtGui,QtCoreimport randomclass MessageBox(QtWidgets.QWidget):   CloseAllowed=0   def __init__(self,parent = None):                 QtWidgets.QWidget.__init__(self)           self.setGeometry(300, 300, 800,800)           self.center()           self.setFixedSize(self.width(),self.height());                             self.setWindowTitle(u'表白神器')           self.setWindowIcon(QIcon('rose.png'))                 self.setToolTip(u'Python')           QtWidgets.QToolTip.setFont(QFont('华文楷体', 12))           self.label1 = QtWidgets.QLabel(u'<b>知道我为什么要学游泳吗。</b>', self)                     self.label1.move(150, 40)           self.label1.setFont(QFont("Timers", 20));           self.label2= QtWidgets.QLabel(u'<b>因为我们马上要坠入爱河了,做我女朋友好吗?</b>', self)           self.label2.move(150, 100)           self.label2.setFont(QFont("Timers", 20));                      self.window_pale = QtGui.QPalette()             self.window_pale.setBrush(self.backgroundRole(),QtGui.QBrush(QtGui.QPixmap("biu.jpg")))           self.setPalette(self.window_pale)           self.buttonOK = QtWidgets.QPushButton(u'我也喜欢你',self)             self.buttonOK.setFocusPolicy(QtCore.Qt.NoFocus)           self.buttonOK.move(50, 700)           self.buttonOK.clicked.connect(self.showDialogOK)           self.buttonE = QtWidgets.QPushButton(u'考虑一下',self)           self.buttonE.setFocusPolicy(QtCore.Qt.NoFocus)           self.buttonE.move(330, 700)             self.buttonE.clicked.connect(self.showDialogEE)           self.buttonNO = QtWidgets.QPushButton(u'你是好人',self)           self.buttonNO.setFocusPolicy(QtCore.Qt.NoFocus)           self.buttonNO.move(610, 700)           self.buttonNO.clicked.connect(self.showDialogNO)    def showDialogOK(self):           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)    def showDialogNO(self):           self.q = random.randint(0, 650)             self.w = random.randint(150, 650)             self.buttonNO.move(self.q, self.w)    def closeEvent(self,event):           if self.CloseAllowed==1:               event.accept()           else:               QtWidgets.QMessageBox.information(self, "未作回应", "小姐姐,请不要逃避!", QtWidgets.QMessageBox.Ok)               event.ignore()      def center(self):           screen=QtWidgets.QDesktopWidget().screenGeometry()           size=self.geometry()           self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2) app=QtWidgets.QApplication(sys.argv)window=MessageBox()window.show()sys.exit(app.exec_()) from PyInstaller.__main__ import run if __name__ == '__main__':    opts = ['Kobe.py', '-w', '--onefile']   run(opts)


介绍结束!明人不说暗话,我喜欢你!


本期作者:沙桀民

本期编辑校对:张惠宁

长按二维码关注数据皮皮侠


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读615
粉丝0
内容2.1k