• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python恋爱指南二款甜度爆表的小程序出炉—还怕找不到对象嘛

武飞扬头像
顾木子吖
帮助1

 导语

害!现在是11月份了,还有几个月就过年了,哦吼~

这一年就快过去了,不知道小编带给大家这么多的表白代码都用了没?用了没吖?如果没用的话小编会继续助攻!

不知道各位单身人士,有没有人从单身dog进化为秀恩爱dog撒~

学新通

Ps——小故事

在我大四的时候,就有一个计算机的朋友用自己做的代码感动了一个数学系的女生。

就是下面这种。(这个爱心是词云图制作而成的!)也不知道为什么妹子放弃了全班40多位帅哥(没错,他们班就她一

个女生),而选择了头发日渐稀疏已经“六月怀胎”的我——朋友。

学新通

今天,我就来教大家一下,如何用Python做二份特别的礼物送给自己的恋人

当然了,如果还是单身的,也可以把这个作为表白神器,跟心爱的人表白

懂编程的就看下面的吧!送上这份礼物之后,保证你明晚.....巫山云雨后,天气晚来秋啊!嘿嘿嘿嘿~

学新通

正文

学新通

    你是不是喜欢我?好巧,我也是吖~

            

学新通

一、Part 1 表白篇—界面化表白小程序

1)环境安装

本文是基于Tkinter的界面化小程序,准备好相应的安装环境素材如下:

Python3、Pycharm、Pygame模块以及一些自带的就不说啦!

统一安装模块命令:pip install -i https://pypi.douban.com/simple/  模块名

2)素材自备

这边小编准备的部分图片如下:

学新通

一些背景音乐、字体当然也要准备好滴哈:

学新通

学新通

3)正式敲代码

3.1先介绍下代码部分单词的作用

  1.  
    Function:
  2.  
    按钮类
  3.  
    Initial Args:
  4.  
    --x, y: 按钮左上角坐标
  5.  
    --width, height: 按钮宽高
  6.  
    --text: 按钮显示的文字
  7.  
    --fontpath: 字体路径
  8.  
    --fontsize: 字体大小
  9.  
    --fontcolor: 字体颜色
  10.  
    --bgcolors: 按钮背景颜色
  11.  
    --is_want_to_be_selected: 按钮是否想被玩家选中
  12.  
    --screensize: 软件屏幕大小
  13.  
    '''

3.2学新通配置一些界面窗口的小设置

  1.  
    # 窗口大小(width, height)
  2.  
    SCREENSIZE = (500, 260)
  3.  
    # 定义一些颜色
  4.  
    RED = (255, 0, 0)
  5.  
    BLACK = (0, 0, 0)
  6.  
    AZURE = (240, 255, 255)
  7.  
    WHITE = (255, 255, 255)
  8.  
    MISTYROSE = (255, 228, 225)
  9.  
    PALETURQUOISE = (175, 238, 238)
  10.  
    PAPAYAWHIP = (255, 239, 213)
  11.  
    LIGHTGRAY = (211, 211, 211)
  12.  
    GAINSBORO = (230, 230, 230)
  13.  
    WHITESMOKE = (245, 245, 245)
  14.  
    DARKGRAY = (169, 169, 169)
  15.  
    BLUE = (0, 0, 255)
  16.  
    DEEPSKYBLUE = (0, 191, 255)
  17.  
    SKYBLUE = (135, 206, 235)
  18.  
    LIGHTSKYBLUE = (135, 206, 250)
  19.  
    # 背景音乐路径
  20.  
    BGM_PATH = os.path.join(os.getcwd(), 'resources/music/bgm.mp3')
  21.  
    # 字体路径
  22.  
    FONT_PATH = os.path.join(os.getcwd(), 'resources/font/STXINGKA.TTF')
  23.  
    # 背景图片路径
  24.  
    BG_IMAGE_PATH = os.path.join(os.getcwd(), 'resources/images/01.jpg')
  25.  
    # ICON路径
  26.  
    ICON_IMAGE_PATH = os.path.join(os.getcwd(), 'resources/images/icon.png')
学新通

学新通3.3主函数

  1.  
    def main():
  2.  
    # 初始化
  3.  
    pygame.init()
  4.  
    screen = pygame.display.set_mode(cfg.SCREENSIZE, 0, 32)
  5.  
    pygame.display.set_icon(pygame.image.load(cfg.ICON_IMAGE_PATH))
  6.  
    pygame.display.set_caption('你知道嘛?')
  7.  
    # 背景音乐
  8.  
    pygame.mixer.music.load(cfg.BGM_PATH)
  9.  
    pygame.mixer.music.play(-1, 30.0)
  10.  
    # biu爱心那个背景图片
  11.  
    bg_image = pygame.image.load(cfg.BG_IMAGE_PATH)
  12.  
    bg_image = pygame.transform.smoothscale(bg_image, (150, 150))
  13.  
    # 实例化两个按钮
  14.  
    button_yes = Button(x=20, y=cfg.SCREENSIZE[1]-70, width=120, height=35,
  15.  
    text='愿意', fontpath=cfg.FONT_PATH, fontsize=15, fontcolor=cfg.BLACK, edgecolor=cfg.SKYBLUE,
  16.  
    edgesize=2, bgcolors=[cfg.DARKGRAY, cfg.GAINSBORO], is_want_to_be_selected=True, screensize=cfg.SCREENSIZE)
  17.  
    button_no = Button(x=cfg.SCREENSIZE[0]-140, y=cfg.SCREENSIZE[1]-70, width=120, height=35,
  18.  
    text='不愿意', fontpath=cfg.FONT_PATH, fontsize=15, fontcolor=cfg.BLACK, edgecolor=cfg.DARKGRAY,
  19.  
    edgesize=1, bgcolors=[cfg.DARKGRAY, cfg.GAINSBORO], is_want_to_be_selected=False, screensize=cfg.SCREENSIZE)
  20.  
    # 是否点击了好呀按钮
  21.  
    is_agree = False
  22.  
    # 主循环
  23.  
    clock = pygame.time.Clock()
  24.  
    while True:
  25.  
    # --背景图片
  26.  
    screen.fill(cfg.WHITE)
  27.  
    screen.blit(bg_image, (cfg.SCREENSIZE[0]-bg_image.get_height(), 0))
  28.  
    # --鼠标事件捕获
  29.  
    for event in pygame.event.get():
  30.  
    if event.type == pygame.QUIT:
  31.  
    # ----没有点击好呀按钮之前不许退出程序
  32.  
    if is_agree:
  33.  
    pygame.quit()
  34.  
    sys.exit()
  35.  
    elif event.type == pygame.MOUSEBUTTONDOWN and event.button:
  36.  
    if button_yes.rect.collidepoint(pygame.mouse.get_pos()):
  37.  
    button_yes.is_selected = True
  38.  
    root = Tk()
  39.  
    root.withdraw()
  40.  
    messagebox.showinfo('', '永远爱你')
  41.  
    root.destroy()
  42.  
    is_agree = True
  43.  
    # --显示文字
  44.  
    showText(screen=screen, text='自从我们相遇的那一刻,', position=(40, 50),
  45.  
    fontpath=cfg.FONT_PATH, fontsize=25, fontcolor=cfg.BLACK, is_bold=False)
  46.  
    showText(screen=screen, text='你是我白天黑夜不落的星!', position=(40, 100),
  47.  
    fontpath=cfg.FONT_PATH, fontsize=25, fontcolor=cfg.BLACK, is_bold=True)
  48.  
    # --显示按钮
  49.  
    button_yes.draw(screen, pygame.mouse.get_pos())
  50.  
    button_no.draw(screen, pygame.mouse.get_pos())
  51.  
    # --刷新
  52.  
    pygame.display.update()
  53.  
    clock.tick(60)
学新通

4)效果图

运行代码之后——背景音乐一上来就有那个味儿了~嘿嘿 超浪漫,界面也很好看的吖——想要什么字体、界面可以自己设置修改优化的!

4.1 自从我们相遇的那一刻,你是我白天黑夜不落的星。 ——莱蒙托夫《乌黑的眼睛》

学新通

4.2学新通 我会不爱你吗?不爱你?不会,爱你就像爱生命。——王小波

学新通

4.3 情侣超甜——甜度爆表啊!哈哈哈啊

学新通

学新通

二、Part 2 表白篇—字符画表白小程序

1)环境安装

相应的安装环境素材如下:

Python3、Pycharm、Pillow模块以及一些自带的就不说啦!

统一安装模块命令:pip install -i https://pypi.douban.com/simple/  模块名

2)素材自备

这边小编准备的部分图片如下:

学新通

3)正式敲代码

3.1主要代码

  1.  
    #-*- coding=utf-8 -*-
  2.  
     
  3.  
    from PIL import Image
  4.  
     
  5.  
    IMG = '02.jpg' #设置图片文件
  6.  
    WIDTH = 150 #设置字符画的宽
  7.  
    HEIGHT = 80 #设置字符画的高
  8.  
    OUTPUT = 'ym.txt' #设置存放字符画的文本文件
  9.  
    ascii_char = list("我喜欢你") #设置显示的字符集
  10.  
     
  11.  
    #将256灰度映射到70个字符上
  12.  
    def get_char(r,g,b,alpha = 256):
  13.  
    #alpha为透明度
  14.  
    # 判断 alpha 值,为0表示全透明
  15.  
    if alpha == 0:
  16.  
    return ' '
  17.  
     
  18.  
    # 获取字符集的长度,这里为 70
  19.  
    length = len(ascii_char)
  20.  
    # 将 RGB 值转为灰度值 gray,灰度值范围为 0-255
  21.  
    gray = int(0.2126 * r 0.7152 * g 0.0722 * b)
  22.  
     
  23.  
    # 灰度值范围为 0-255,而字符集只有 70
  24.  
    # 需要进行如下处理才能将灰度值映射到指定的字符上
  25.  
    #防止当灰度值为255时,输出的第70个字符超出列表索引,所以需要将(255 1)
  26.  
    unit = (255.0 1)/length
  27.  
     
  28.  
    # 返回灰度值对应的字符
  29.  
    return ascii_char[int(gray/unit)]
  30.  
     
  31.  
    if __name__ == '__main__':
  32.  
     
  33.  
    # 打开并调整图片的宽和高
  34.  
    im = Image.open(IMG)
  35.  
    im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
  36.  
     
  37.  
    # 初始化输出的字符串
  38.  
    txt = ""
  39.  
     
  40.  
    # 遍历图片中的每一行
  41.  
    for i in range(HEIGHT):
  42.  
    # 遍历该行中的每一列
  43.  
    for j in range(WIDTH):
  44.  
    # 将 (j,i) 坐标的 RGB 像素转为字符后添加到 txt 字符串
  45.  
    txt = get_char(*im.getpixel((j,i)))
  46.  
    # 遍历完一行后需要增加换行符
  47.  
    txt = '\n'
  48.  
    # 输出到屏幕
  49.  
    print(txt)
  50.  
    with open(OUTPUT,'w') as f:
  51.  
    f.write(txt)
学新通

学新通4)效果图

4.1 图跟文字选的不好,所以效果有点儿社会性死亡了!哈哈哈~尴尬的笑笑缓解一下,不要是去表白的结果变成分手了哈!

学新通

4.2 这张图选择我估计看不出来是个人了!所以说——选择图片跟文字是有技巧的,只是我比较懒!

学新通

总结

“余生很长,想和你没完没了”——所以看到这里的小伙伴儿记得点个关注哦!哈哈哈

好啦 !这二款表白的代码就写到这里了哈,是不是今天又学到了一招会撩妹纸撩汉子的小技巧。赶快自己去试试吧~

你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~

 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggecef
系列文章
更多 icon
同类精品
更多 icon
继续加载