from kivy.lang.builder import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
import requests
import time
import re
import threading
from kivy.uix.widget import Widget
from kivy.config import Config
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.uix.filechooser import FileChooserListView Config.set('kivy', 'default_font', [
'msgothic',
'DroidSansFallback.ttf']) tem = Builder.load_string('''
<TitleRow>
orientation: 'horizontal'
Label:
text:'name'
Label:
text:'level'
Label:
text:'map'
Label:
text:'attack'
Label:
text:'warn' <DataRow>
name:name
level:level
map:map
attack:attack
warn:warn
orientation: 'horizontal'
Label:
id:name
text:''
Label:
id:level
text:''
Label:
id:map
text:''
Label:
id:attack
text:''
Label:
id:warn
text:'' <SelectFile>
fc:fc
orientation:'vertical'
FileChooserListView
path:'./'
id:fc
size_hint_y:None
height:root.height*0.85
BoxLayout:
orientation:'horizontal'
Button:
size_hint_y:None
height:root.height*0.1
text:'confirm'
on_release:root.confirm(root.fc)
Button:
size_hint_y:None
height:root.height*0.1
text:'cancel'
on_release:root.parent.parent.parent.dismiss() <Check>
name:'check window'
run:run
fileaddr:fileaddr
orientation:'vertical'
TitleRow:
id:row1
DataRow:
id:row2
DataRow:
id:row3
DataRow:
id:row4
DataRow:
id:row5
DataRow:
id:row6
DataRow:
id:row7
DataRow:
id:row8
DataRow:
id:row9
DataRow:
id:row10
DataRow:
id:row11
BoxLayout:
orientation:'horizontal'
Button:
id:run
text:'run'
on_release:self.parent.parent.click(self)
disabled:False
Button:
id:reset
text:'reset'
on_release:self.parent.parent.reset()
Button:
id:fileaddr
size_hint_y:None
height:'40px'
addr:'test_file_addr'
text:'select account file'
on_release:self.parent.select(self)
''') class SelectFile(BoxLayout):
def confirm(self, instance):
file = str(instance.selection[0])
self.parent.parent.parent.parent.children[1].fileaddr.addr = file
self.parent.parent.parent.dismiss() class GetInfo(object):
def __init__(self, txtfile):
super(GetInfo, self).__init__()
with open(txtfile, 'r', encoding='utf-8') as f:
a = f.readlines()
f.close()
self.accounts = []
for account in a:
self.accounts.append(account.strip().split(','))
if len(self.accounts) > 13:
self.accounts = self.accounts[:13]
self.qty = len(self.accounts) def status(self, Check):
for i in range(self.qty):
Check.ids['row' + str(i + 2)].name.text = 'pending'
Check.ids['row' + str(i + 2)].level.text = 'pending'
Check.ids['row' + str(i + 2)].map.text = 'pending'
Check.ids['row' + str(i + 2)].attack.text = 'pending'
Check.ids['row' + str(i + 2)].warn.text = 'pending' def details(self, Check):
self.status(Check)
userinfo = []
for user in self.accounts:
try:
fcsrf = self.getcsrf()
time.sleep(1)
info = self.getinfo(user, fcsrf)
time.sleep(1)
except Exception as e:
info = ''
userinfo.append(eval(info)) results = []
for info in userinfo:
try:
warn = ''
if info['weight'] / info['maxweight'] > 0.5:
warn = warn + 'weight,'
if int(info['hp']) < 2:
warn = warn + 'died,'
if info['autoattack'] != 49:
warn = warn + 'no auto'
if warn == '':
warn = 'ok'
attack = 'yes_auto' if info['autoattack'] == 49 else 'no_auto'
result = [info['name'], info['base_level'], info['last_map'],attack, warn]
except Exception:
result = [None, None, None, None, None]
results.append(result) for i in range(self.qty):
try:
Check.ids['row'+ str(i+2)].name.text = str(results[i][0])
Check.ids['row'+ str(i+2)].level.text = str(results[i][1])
Check.ids['row'+ str(i+2)].map.text = str(results[i][2])
Check.ids['row'+ str(i+2)].attack.text = str(results[i][3])
Check.ids['row'+ str(i+2)].warn.text = str(results[i][4])
except Exception:
Check.ids['row' + str(i+2)].name.text = 'none'
Check.ids['row' + str(i+2)].level.text = 'none'
Check.ids['row' + str(i+2)].map.text = 'none'
Check.ids['row' + str(i+2)].attack.text = 'none'
Check.ids['row' + str(i+2)].warn.text = 'none'
Check.ids.reset.disabled = False
return True def getinfo(self, user, keys):
header = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,la;q=0.6,zh-TW;q=0.5',
'AlexaToolbar - ALX_NS_PH': 'AlexaToolbar / alx - 4.0.3',
'Connection': 'keep-alive',
'Cookie': keys[0],
'Content-Length': '125',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'www.zizi.cn',
'Origin': 'http://www.zizi.cn',
'Referer': 'http://www.zizi.cn/?r=mn/index',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36',
}
url = 'http://www.zizi.cn/?r=mn/search'
data = {
'_csrf': keys[1],
'Login[userid]': user[0],
'Login[user_pass]': user[1],
}
response = requests.post(url=url, headers=header, data=data)
content = response.content.decode('utf-8')
return content def getcsrf(self):
url = 'http://www.zizi.cn/?r=mn/index'
index = requests.get(url=url)
cookie = str(index.cookies)
patt = r'\ (.*)\ for'
cookie = re.findall(patt, cookie)[0]
index = index.content.decode('utf-8')
pattern = r'id=\"_csrf\"\ value=\"(.*)\"'
csrf = re.findall(pattern, index)[0]
return [cookie, csrf] class TitleRow(BoxLayout):
pass class DataRow(BoxLayout):
pass class Check(BoxLayout):
def click(self, obj):
file = self.fileaddr.addr
t = threading.Thread(target=GetInfo(file).details, args=[self])
t.start()
self.ids.reset.disabled = True
obj.disabled = True def reset(self):
for i in range(10):
self.ids['row'+str(i+2)].name.text = ''
self.ids['row'+str(i+2)].level.text = ''
self.ids['row'+str(i+2)].map.text = ''
self.ids['row'+str(i+2)].attack.text = ''
self.ids['row'+str(i+2)].warn.text = ''
self.ids.run.disabled = False
self.fileaddr.addr = '' def select(self, instance):
content = SelectFile()
self.popup = Popup(title="select file...", content=content,size_hint=(0.9, 0.9))
self.popup.open() class GameRo(App):
def build(self):
return Check() if __name__ == '__main__':
GameRo().run()

  

kivy 小demo的更多相关文章

  1. 新手 gulp+ seajs 小demo

    首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1 ...

  2. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  3. Nancy之基于Nancy.Owin的小Demo

    前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...

  4. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  5. [Unity3D]做个小Demo学习Input.touches

    [Unity3D]做个小Demo学习Input.touches 学不如做,下面用一个简单的Demo展示的Input.touches各项字段,有图有真相. 本项目已发布到Github,地址在(https ...

  6. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

  7. Win10 FaceAPI小demo开发问题汇总

    Win10 FaceAPI小demo开发问题汇总 最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRand ...

  8. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  9. Android学习小Demo一个显示行线的自定义EditText

    今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...

随机推荐

  1. sublime的lua插件

    1.语法检测插件~ sublimelinter sublimelinter-lua sublimelinter-luacheck 以上插件装好以后,在环境变量里面有加上lua.exe就ok了! 这个就 ...

  2. Django 框架 Form组件

    一.Form组件简介 Form组件是django中一个非常强大的组件,在处理服务端和前端的交互上大大的提高了开发人员的开发速度. Form组件的功能: 用于处理前后端的数据认证(显示错误信息) 用于生 ...

  3. JFrame绝对布局

    通过代码:setLayout(null);设置容器布局为绝对布局. 添加控件要注意:一定要设置控件具体的位置.可通过代码setLocation(20, 20)或者setBounds(0, 0, 30, ...

  4. git cherry-pick 报错 fatal: bad object

    场景:程序员A提交了一个commit到gerrit上,我们叫他为commit_id1,但是还没有review,那就是没有入库,程序员B想再本地拿到这个commitd_id1,既然这个提交没有入库,很明 ...

  5. Linux配置SSH免登录

    [root@Linux01 ~]# ssh-keygen #生成公私钥 [root@Linux01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub hadoopuser@Ha ...

  6. obv15 案例4,待日后分析

    obv

  7. 将NetBIOS名称解析为IP地址的常用方法

    在Windows网络中,当一台计算机要利用NetBIOS名称与另一台计算机通信时,首先要将对方计算机的NetBIOS名称解析成IP地址 2.广播   通过发送一个广播消息来查询对方的IP地址,拥有此N ...

  8. CSU 1849 Comparing answers(数学矩阵)

    Comparing answers 离散数学真的要好好学啊:一个邻接矩阵(这个矩阵一定是n×n的方阵,n是图的节点个数),表示的是从i到j有几条通路的时候,矩阵的1次方就代表从从i到j长度为1的路径通 ...

  9. E. Gerald and Giant Chess

    E. Gerald and Giant Chess time limit per test 2 seconds memory limit per test 256 megabytes2015-09-0 ...

  10. CSS选择符-----关系选择符

       包含选择符(E F)           选择所有被E元素包含的F元素 与 子选择符(E>F) 不同的是,包含选择符将会命中所有符合条件的后代,包括儿子,孙子,孙子的孙子... <! ...