python - Python 初学者问题 - Tkinter、Threading 和 bs4 模块
问题描述
用 Anaconda 运行 Python 3.6.5,我还不习惯 PEP,很抱歉我的糟糕代码:P
我正在寻找一个程序来检查 HTML 代码,在线玩家在哪里,并检查是否有在线游戏大师。此代码应适用于在游戏中观看电影且在游戏中处于“afk”状态且不允许为“afk”的玩家 - 此窗口应警告他们。所以我编写了这样的代码。(忽略评论 - 我试图用 pandas 让它看起来更好,但它太多了)
我在找什么?
我使用了关键字“ADMINS”,因为他们的公会称为 ADMINS。每当 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)
解决方案
我的问题是,有时代码有效,但有时无效,我真的不知道为什么。:D 即使帐户出现在在线 ppl 列表中,它也会一直给我“-”。只需将 gm 变量更改为与页面不同的内容即可。(例如:'Teriyaki' 或其他)无论如何谢谢 Nummer_42O,你真的帮了我很多。:P
编辑:我想我知道问题出在哪里。粘贴部分代码。当我检查这个过程时,我发现这只是检查最后一行。有任何想法吗?
import sys
import urllib
import bs4 as bs
from tkinter import *
from tkinter import ttk
import threading
gm =('ADMINS')
root = Tk(className='Status')
v = StringVar()
v.set('-')
style = ttk.Style()
style.configure("red.TLabel", foreground = "red")
label = ttk.Label(root, textvariable=v, style = "red.TLabel")
label.pack()
#print(v.get())
def check():
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 str(gm) in str(row) and v.get() == ('-'):
v.set('GM je ONLINE!')
break
elif str(gm) not in str(row) and v.get() == ('GM je ONLINE!'):
v.set('-')
#print(v.get())
def repeat():
thread = threading.Timer(10, repeat)
try:
check()
thread.start()
root.update()
except KeyboardInterrupt:
root.destroy()
thread.cancel()
pass
pass
repeat()
root.call('wm', 'attributes', '.', '-topmost', '1')
root.mainloop()
推荐阅读
- python - 使用 PyPDF2 Python 合并具有相同前缀的 PDF 文件
- reactjs - 来自 Docker 的网络 IP 不适用于 React + Vite.js,因此无法访问 k8s pod
- python - 蟒蛇 | Tkinter RuntimeError:主线程不在主循环中
- javascript - 如何通过键盘和鼠标访问 input[type="date"]?
- c - 关于C中的时间戳
- mips - 如何清除 mips 数组?
- next.js - NextJS 服务器端渲染在动态导入时未禁用
- javascript - 如何在javascript中获取模型值
- c++ - listener::on_accept 函数在 Boost 库中的 do_accept 函数结束时不被调用
- html - HTML 错误表格行宽 2 列,小于第一行建立的列数 (3)