在Anaconda上运行Python 3.6.5,我还不习惯PEP,所以很抱歉我的卑鄙代码:P
我正在寻找一个程序,该程序将检查HTML代码,在线播放器在哪里,并检查是否有在线游戏大师。此代码应适用于在玩游戏时正在观看电影并且在游戏中处于“ afk”状态的玩家,并且bcs不允许将其变为“ afk”状态-此窗口应警告他们。因此,我编写了这样的代码。(忽略注释-我试图使它在大熊猫中看起来更好,但它的方式太多了)
我在找什么?
我使用了关键字“ ADMINS” bcs,其公会名为ADMINS。 每当GM出现在联机列表中时-弹出带有警告的窗口(GM处于在线状态!),但是当我使用线程时,代码会一遍又一遍地运行,并且会出现越来越多的窗口。是否有可能使该窗口仅出现一次并以给定的间隔刷新它?还是要一直打开一个窗口,如果没有在线GM会一直显示“-”,如果有GM就会一直显示“ GM ONLINE”?
我第一次使用tkinter,现在还不确定如何制作。如果你给我一个例子,那太好了。
提前谢谢!
import sys
import urllib
import bs4 as bs
from tkinter import *
from tkinter import ttk
import threading
gm = 'ADMINS'
def repeat():
threading.Timer(10, repeat).start()
link = 'https://www.daemu.cz/zebricky/online/'
request = urllib.request.Request(
link, headers={'User-Agent': 'Mozilla/5.0'})
source = urllib.request.urlopen(request).read()
#pocet_na_webpage = re.search('je online (.+?) ', str(source)).group(1)
#df_table = pd.read_html(source)[0]
soup = bs.BeautifulSoup(source, "lxml")
table = soup.table
#filtering = df_table.filter(items=[0,1,3,6])
table_rows = table.find_all('tr')
for tr in table_rows:
td = tr.find_all('td')
row = [i.text for i in td]
#print(row)
if gm in row:
root = Tk()
label = ttk.Label(root, text="GM je ONLINE!")
label.pack()
root.mainloop()
else:
print('-')
repeat()
# prazdny_list = []
# for i in range(0,len(row)):
# if row == gms:
# prazdny_list.append(True)
# else:
# prazdny_list.append(False)
# row['sloupec'] = prazdny_list
# print(row)
答案 0 :(得分:0)
如果我正确理解了您的答案,那么您希望该Tkinter小窗口仅显示是否已更改某些内容,或者仅更改其文本,对不对?
所以对我来说,使用更少代码的方法将是第二种方法。因此,我将首先启动该窗口,然后通过label.config(text=<text>)
对其进行配置。
因此,为了让您更清楚-这应该有效:
import sys
import urllib
import bs4 as bs
from tkinter import *
from tkinter import ttk
import threading
gm = 'ADMINS'
root=Tk(className='Status')
label=ttk.Label(root,text='-')
label.pack()
def repeat():
threading.Timer(10, repeat).start()
link = 'https://www.daemu.cz/zebricky/online/'
request = urllib.request.Request(link, headers={'User-Agent': 'Mozilla/5.0'})
source = urllib.request.urlopen(request).read()
#pocet_na_webpage = re.search('je online (.+?) ', str(source)).group(1)
#df_table = pd.read_html(source)[0]
soup = bs.BeautifulSoup(source, "lxml")
table = soup.table
#filtering = df_table.filter(items=[0,1,3,6])
table_rows = table.find_all('tr')
for tr in table_rows:
td = tr.find_all('td')
row = [i.text for i in td]
#print(row)
if gm in row and label.cget('text')=='-':
label.config(text='GM je ONLINE!')
elif gm not in row and label.cget('text')=='GM je ONLINE!':
label.config(text='-')
repeat()
root.mainloop()
答案 1 :(得分:0)
我的问题是,有时代码可以工作,但有时却不行,我也不知道为什么。 :D即使在在线PPL列表中出现一个帐户,它也始终为我提供“-”。只需将gm变量更改为与页面不同的内容即可。 (例如:“ Teriyaki”或其他)。无论如何,感谢Nummer_42O,您确实对我有很大帮助。 :P
编辑:我想我知道问题出在哪里。粘贴部分代码。当我检查过程时,我发现这只是检查最后一行。有什么想法吗?
return new ListView.builder(
itemCount: snapshot?.data?.length,
itemBuilder: (context, index) {
return new ListTile(
title: new Text("${snapshot.data[index]}"),
);
}
);