qpython带kivy库_kivy 小demo

该代码实现了一个Kivy应用,用于选择文件并获取其中的游戏账号信息。通过File Chooser选择文件后,程序读取文件内容,展示账号的状态、等级、地图、攻击和警告信息。使用了线程来异步处理信息获取,避免阻塞UI。同时,程序能够检查账号的特定条件,如重量、生命值和自动攻击设置,并显示相应的警告。
摘要由CSDN通过智能技术生成

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('''

orientation: 'horizontal'

Label:

text:'name'

Label:

text:'level'

Label:

text:'map'

Label:

text:'attack'

Label:

text:'warn'

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:''

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()

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值