前期吐槽:

还记得8年前,大概是八年级的时候,那时候自己很帅。。

《名字打架》这款小游戏还是挺火的。。

突然想起来,就用Tkinter做了个。。类似的。。很挫,不过编程,就是自由,想怎么编就怎么编。。

改了个名字,叫姻缘测试器。。

其实真的很无聊,就是巩固下Tkinter。。没什么意思。。大神可以别看。。

算法

MD5 + 是否能够mod 3 尽,两个人都能mod尽,那就最屌了,只有一个人mod 3尽,就凑合,如果都mod 不尽,就可能不适合。
为什么是3呢? 你不觉得世界很多东西和3有关系吗?很多时间间隔是3秒,多了就长,少了就短。而且,本人和3关系很大。。家里排老三呢。。

大概长个样子

代码

# -*- coding: utf-8 -*-
from Tkinter import *
from ttk import Frame, Button, Style, Entry, Label
import tkMessageBox
import re
import urllib, Queue, sgmllib
import time
import threading
import tkFileDialog
import random
import hashlibclass NameFighter(Frame):txt = ""area = Noneen1 = Noneen2 = Nonedef __init__(self,parent):Frame.__init__(self,parent)self.parent = parentself.initUI()#事件绑定,用来实时显示textself.parent.bind("<<A>>", lambda evt:self.area.insert(END,self.txt))#事件绑定,让Text跟踪到最新一行self.parent.bind("<<CurrentView>>", lambda evt:self.area.see(END))#事件绑定,让goBtn恢复正常self.parent.bind("<<NormalGoBtn>>", lambda evt: self.goBtn.config(state = NORMAL))def do_figting(self,moves,n1,n2,b1,b2):try:self.txt = "如果两人能够坚持越久轮,爱情就越稳固!\n"self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本time.sleep(1)for i in range(5,0,-1):self.txt = "倒计时:"+str(i)+"秒!\n"self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本time.sleep(1)self.txt = n1 + " 初始血量:"+ str(b1)+" \n" + n2 + " 初始血量:"+str(b2)+" \n"self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本time.sleep(1)flag = 1while b1 > 0 and b2 > 0:self.txt = "\n=========================第"+str(flag)+"轮=========================\n"self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本time.sleep(1)tempb = random.randint(300,400)tempm = random.randint(0,len(moves)-1)if flag % 2 == 0:b2 -= tempbif b2 < 0 :self.txt = n2+" 不堪重负,被 "+n1+"活活打死了...\n"else:self.txt = n1+" "+moves[tempm]+" "+n2+" 造成"+str(tempb)+"的伤害!"self.txt += n2+"剩下血量:"+str(b2)+"\n"else:b1 -= tempbif b1 < 0 :self.txt = n1+" 不堪重负,被 "+n2+"活活打死了...\n"else:self.txt = n2+" "+moves[tempm]+" "+n1+" 造成"+str(tempb)+"的伤害!"self.txt += n1+"剩下血量:"+str(b1)+"\n"flag += 1self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本time.sleep(1.5)self.txt = "\n======================一切都结束了======================\n"self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本time.sleep(1)#真正的逻辑,以3为基准if b1 % 3 == 0 and b2 % 3 == 0:self.txt = "恭喜"+n1+" 和 "+n2+"!你们非常适合在一起!\n"elif b1 % 3 == 0 or b2 % 3 == 0:self.txt = "恭喜"+n1+" 和 "+n2+"!因为有一个人比较迁就的关系,你们还算比较适合在一起!\n"else:self.txt = "哎!"+n1+" 和 "+n2+"!貌似不合适?不想说什么!\n"self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本finally:self.parent.event_generate("<<NormalGoBtn>>",when="tail")#触发bind的事件,让goBtn恢复def onGo(self):maleName = self.en1.get()famaleName = self.en2.get()n1 = maleName.encode("utf8")n2 = famaleName.encode("utf8")md5_1 = hashlib.md5()md5_1.update(n1)md5_1 = md5_1.hexdigest().upper()md5_2 = hashlib.md5()md5_2.update(str(n2))md5_2 = md5_2.hexdigest().upper()blood_1 = 0 for i in range(len(md5_1)):blood_1 += ord(md5_1[i])print blood_1blood_2 = 0 for i in range(len(md5_2)):blood_2 += ord(md5_2[i])print blood_2if maleName == "" or famaleName == "":tkMessageBox.showinfo('逗比','你不写名字我怎么算\n' )else:moves = ['咬了一口','踢了一下','挠了一下','放出了大海无量打中','舔了一下','搓了一下','吼了一下']self.goBtn.config(state=DISABLED) #先置为disableddo_figting_thread = threading.Thread(target=self.do_figting,args = (moves,n1,n2,blood_1,blood_2,))do_figting_thread.start()def onHelp(self):tkMessageBox.showinfo('玩法','随便点点,即使是逗比也会玩呢\n' )   def initUI(self):#大小,位置w = 600h = 400sw = self.parent.winfo_screenwidth()sh = self.parent.winfo_screenheight()x = (sw-w)/2y = (sh-h)/2self.parent.geometry('%dx%d+%d+%d' % (w,h,x,y))self.parent.title("哈尔滨马家沟男子职业技术学院出品!电脑算命-姻缘测试器")#风格self.style = Style()self.style.theme_use("default")Style().configure("TButton", padding = (0, 5, 0, 5), font='serif 10')#控件位置调控self.columnconfigure(1, weight = 1)self.columnconfigure(2, pad = 7)self.rowconfigure(3, weight = 1)self.rowconfigure(5, pad = 7)#标签lb1 = Label(self, text = "请输入男方姓名: ")lb1.grid(row = 0, column = 0, sticky = W)lb2 = Label(self, text = "请输入女方姓名: ")lb2.grid(row = 1, column = 0, sticky = W)#输入点Entryself.en1 = Entry(self)self.en1.grid(row = 0, column = 1,  columnspan = 1, sticky = W+E)self.en2 = Entry(self)self.en2.grid(row = 1, column = 1,  columnspan = 1, sticky = W+E)#显示结果的text & Scrollbarself.area = Text(self, bg = 'black', fg = 'green')self.area.grid(row = 2,column = 0, columnspan = 2, rowspan = 4, sticky = E+W+S+N)self.area.see(1000.0)self.sb = Scrollbar(self)self.sb.grid(row = 2, column = 1, rowspan = 4, sticky = E+W+S+N)self.area['yscrollcommand'] = self.sb.set #text往下走,触发scrollbar的set()self.sb['command'] = self.area.yview #scrollbar的拖动,触发text的view移动#Go按钮self.goBtn = Button(self, text = "Go!",command = self.onGo)self.goBtn.grid(row = 0, column = 2)lb3 = Label(self, text = "电脑算命-绝对准确, made by ouyang! ")lb3.grid(row = 6, column = 1, sticky = E)#Help按钮helpBtn = Button(self, text = "怎么玩?",command = self.onHelp)helpBtn.grid(row = 6, column = 2)#最终绑定self.pack(fill = BOTH,expand = 1)def main():root = Tk()root.geometry("250x150+300+300")app = NameFighter(root)root.mainloop()if __name__ == '__main__':main()

重点关注

事件的绑定和触发

事件触发的时候,把事件放到tail最好,不然容易乱。。。when="tail"

python 基于Tkinter的姻缘测试器相关推荐

  1. Python基于tkinter的GUI编程讲座

    Python基于tkinter的GUI编程讲座 图形用户界面(GUI.Graphical User Interface)是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于字 ...

  2. python 基于ddt实现数据驱动测试

    这篇文章主要介绍了python 基于DDT实现数据驱动测试的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下 简单介绍 ​ ddt(date driver test),所谓数据驱 ...

  3. Python使用Tkinter实现转盘抽奖器

    Python使用Tkinter实现转盘抽奖器 我使用 Python 中的 Tkinter 模块实现了一个简单的滚动抽奖器,接下来继续写一个简单的转盘抽奖器. Tkinter 实现滚动抽奖器参考:htt ...

  4. 【Python项目】Python基于tkinter实现笔趣阁小说下载器(附源码)

    前言 hello,大家好呀~ 笔趣阁小说应该很多小伙伴都知道 但是用Python实现一个笔趣阁小说下载器 那岂不是爽歪歪呀 基于tkinter实现的Python版本的笔趣阁小说下载器今天小编给大家实现 ...

  5. Python 基于tkinter的GUI编程

    tkinter是Python的标准GUI库 加载tkinter模块 Tk():创建应用程序主窗口 tkinter控件(组件.窗口部件) Label控件(标签) 示例代码 **(文本显示)** 示例代码 ...

  6. Python 基于tkinter模块的GUI可视化学生成绩管理系统实现(含文件保存)

    学生成绩管理系统 1. 标准模块导入 2.完整代码 3.文件保存模块 作者:潇 版本:1.0 面向对象,带日志,带异常处理的,带密码加密 第一次执行会生成数据库和csv文件,以后添加的数据会自动保存到 ...

  7. Python 基于tkinter和sqlite3的会员管理系统

    在CSDN平台潜水了一年多,终于在今天决定发帖冒个泡.首先感谢开源精神,让我学到了很多知识. 下面来介绍一下这个软件~ 简单介绍 主要采用tkinter库以及sqlite3数据库,虽然tkinter库 ...

  8. python 基于tkinter商品销售系统

    苹果手机商店信息管理系统 在信息时代的今天,计算机以其快速,准确的处理功能渗透在我们周围的方方面面,同时随着网络技术和软件技术的飞速发展,当今社会也正快速向信息化时代前进,信息系统的作用也越来越大,商 ...

  9. python弹球小游戏程序_Python基于Tkinter模块实现的弹球小游戏

    本文实例讲述了Python基于Tkinter模块实现的弹球小游戏.分享给大家供大家参考,具体如下: #!usr/bin/python #-*- coding:utf-8 -*- from Tkinte ...

最新文章

  1. 获得MFC窗口其它类指针的方法
  2. 不用加减乘除符号计算两数之和
  3. python高效编程15个利器_你不知道的18个Python高效编程技巧
  4. linux中脚本退出函数,Linux 命令 shell 脚本之09(函数)
  5. win7局域网共享设置_Win7系统打印机共享不了的设置方法思路!
  6. [精品]CSAPP Bomb Lab 解题报告(六)
  7. Docker 上安装、启动 MySQL (图解)
  8. linux 每日学一点《明明白白配置lilo启动引导器》
  9. Google开发者大会:你不得不知的Tensorflow小技巧
  10. 更新数据时出错——所有记录中均未找到搜索关键字
  11. BZOJ.4650.[NOI2016]优秀的拆分(后缀数组 思路)
  12. 小战Java笔记_SE_Identifier(标识符)
  13. java if if else语句_Java if else条件判断语句用法
  14. mybatis中mysql递归查询多级_mybatis+mysql递归查询
  15. php 显示探针_雅黑php 探针
  16. 【回归分析】logistic regresssion中的拟合优度检验(goodness-of-fit test)
  17. java面经_Java面经
  18. Guideline 2.3.3 -- We noticed that your screenshots do not sufficiently reflect your app in use
  19. VirtualBox的vmdk文件压缩
  20. springboot +mybatis实现多表一对一查询

热门文章

  1. iOS二十种超酷时尚艺术滤镜汇总
  2. Android 快速集成阿里云OSS服务2020
  3. CRM 学习笔记(一)
  4. PYTHON开发毕业设计做什么好鸭?
  5. Hadoop HDFS启动报异常:We expected txid 130043, but got txid 229381
  6. 十秒钟刷完云班课的一节视频
  7. 百度2016研发工程师在线编程题
  8. c语言未定义main报错,C语言编译器的错误信息
  9. android 10.0 wifi开关控制
  10. 64位ubuntu使用gcc -m32报错