kivy 小demo
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的更多相关文章
- 新手 gulp+ seajs 小demo
首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1 ...
- Nancy之基于Nancy.Hosting.Self的小Demo
继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...
- Nancy之基于Nancy.Owin的小Demo
前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...
- Nancy之基于Self Hosting的补充小Demo
前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...
- [Unity3D]做个小Demo学习Input.touches
[Unity3D]做个小Demo学习Input.touches 学不如做,下面用一个简单的Demo展示的Input.touches各项字段,有图有真相. 本项目已发布到Github,地址在(https ...
- Android -- 自定义View小Demo,动态画圆(一)
1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...
- Win10 FaceAPI小demo开发问题汇总
Win10 FaceAPI小demo开发问题汇总 最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRand ...
- 模仿京东顶部搜索条效果制作的一个小demo
最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...
- Android学习小Demo一个显示行线的自定义EditText
今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...
随机推荐
- 三维bfs(HUD1253胜利大逃亡)
#include <stdio.h>#include <string.h>int map[51][51][51];int v[51][51][51];int a,b,c,t11 ...
- Spring MVC POM示例
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Extjs event domain 研究
Listeners and Event Domains In Ext JS 4.2, the MVC event dispatcher was generalized with the introdu ...
- 背景图宽高100%无法无法显示的问题【body设置relative,当前元素absolute】
以下1,2两个关键元素 body{ width:100%; height:100%; position:relative; //1 } .login-form { width: 100%; ...
- inbox.MoveTo Folder does not move message out of inbox
inbox.MoveTo Folder does not move message out of inbox #160 Closed vnwind opened this issue on 14 M ...
- Entity Framework学习初级篇3--LINQ TO Entities
LINQ 技术(即LINQ to Entities)使开发人员能够通过使用LINQ 表达式和LINQ 标准查询运算符,直接从开发环境中针对实体框架对象上下文创建灵活的强类型查询.LINQ to Ent ...
- Nodejs基础(5-6)HTTP概念进阶
1.什么是回调? 是异步编程最基本的方法,对于nodejs来说需要按顺序执行异步逻辑的时候一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数逐层去嵌套.通过这种方式来让程序按照 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (三)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ecshop 前台个人中心修改侧边栏 和 侧边栏显示不全 或 导航现实不全
怎么给个人中心侧边栏加项或者减项 在模板文件default/user_menu.lbi 文件里添加或者修改,一般看到页面都会知道怎么加,怎么删,这里就不啰嗦了 添加一个栏目以后,这个地址跳的页面怎么写 ...
- 前端流程图jsplumb学习笔记
1.这篇博客很好,另外两个是官网文档 http://www.cnblogs.com/leomYili/p/6346526.html https://jsplumbtoolkit.com/communi ...