【发布时间】:2015-03-09 04:34:52
【问题描述】:
我想构建一个简单的 Kivy 应用:
- 要求用户输入一个整数 (MTP)
- 要求用户输入延迟间隔(delay)
- 在用户按下提交按钮后查询一个url,然后从 该查询创建一个显示的熊猫数据框(如 表)在 Kivy 应用程序的主屏幕上,然后输出 更新数据帧,直到 MTP 和延迟间隔结束
我将查询的所有代码用作常规 python 程序,我只是不知道如何显示用户输入和输出数据帧(和时间戳)。 (见下文)
import requests
import time
from bs4 import BeautifulSoup
from datetime import datetime
import itertools
import pandas as pd
mtp = input("Input whole number of minutes to post:") #<-How to do on Kivy Screen
delay = input("Enter 15, 30 or 60 second delay:") #<-How to ask on Kivy Screen
STP = int(mtp)*60
def requestOdds():
url = "https://WEBPAGE WITH ODDS DATA.aspx"
r = requests.get(url)
soup = BeautifulSoup(r.content)
stamp = datetime.now().strftime('%m/%d %H:%M:%S')
tbPPosts = ('rptOdds_ctl01_tdOdd', 'rptOdds_ctl02_tdOdd','rptOdds_ctl03_tdOdd','rptOdds_ctl04_tdOdd','rptOdds_ctl05_tdOdd','rptOdds_ctl06_tdOdd','rptOdds_ctl07_tdOdd','rptOdds_ctl08_tdOdd','rptOdds_ctl09_tdOdd','rptOdds_ctl10_tdOdd','rptOdds_ctl11_tdOdd','rptOdds_ctl12_tdOdd','rptOdds_ct113_tdOdd','rptOdds_ct114_tdOdd','rptOdds_ct115_tdOdd','rptOdds_ct116_tdOdd','rptOdds_ct117_tdOdd','rptOdds_ct118_tdOdd','rptOdds_ct119_tdOdd','rptOdds_ct120_tdOdd','rptOdds_ct121_tdOdd')
mlPPosts = ('rptOdds_ctl01_tdMl','rptOdds_ctl02_tdMl','rptOdds_ctl03_tdMl','rptOdds_ctl04_tdMl','rptOdds_ctl05_tdMl','rptOdds_ctl06_tdMl','rptOdds_ctl07_tdMl','rptOdds_ctl08_tdMl','rptOdds_ctl09_tdOdd','rptOdds_ctl10_tdMl','rptOdds_ctl11_tdMl','rptOdds_ctl12_tdMl','rptOdds_ct113_tdMl','rptOdds_ct114_tdMl','rptOdds_ct115_tdMl','rptOdds_ct116_tdMl', 'rptOdds_ct117_tdMl','rptOdds_ct118_tdMl','rptOdds_ct119_tdMl','rptOdds_ct120_tdMl','rptOdds_ct121_tdMl')
trimmed_text=[]
trimmed_text2=[]
tbodds = []
mlodds = []
odds = []
for horse in tbPPosts:
table = soup.find('td', {"odds-table-odd"}, id=horse)
if table is not None:
text = table.renderContents()
trimmed_text = text.strip()
tbodds.append(trimmed_text)
for mlhorse in mlPPosts:
table2 = soup.find('td', {"odds-table-ml"}, id=mlhorse)
if table2 is not None:
text2 = table2.renderContents()
trimmed_text2 = text2.strip()
mlodds.append(trimmed_text2)
mlodds = itertools.ifilterfalse(lambda x: x=='', mlodds) #faster
tbodds = itertools.ifilterfalse(lambda x: x=='', tbodds)
oddsDict = dict(zip(mlodds, tbodds))
**odds = pd.DataFrame(list(oddsDict.iteritems()), columns=['ML','TB'])
print odds, stamp** #<--How do I get these to print onto the Kivy Screen?
def getLiveOdds():
interval = 0
while interval <= STP:
requestOdds()
time.sleep(delay)
interval +=delay
getLiveOdds()
任何帮助将不胜感激!
【问题讨论】:
-
我没有特别多的 kivy 经验,但我怀疑将 DataFrame 转换为 html 将是最好的方法 - 有一个
DataFrame.to_html()方法,其余的取决于你有哪些显示选项Kivy 应用程序中的 html。 -
我还没有找到任何适合我的东西。我还在寻找答案。如果有人在读这篇文章,我真的只需要知道如何让 Kivy 在窗口中打印 pandas 数据框表甚至是 python dict 的部分。我可以完成剩下的工作。