利用爬虫技术获取英语单词,并通过tkinter库实现猜单词游戏
source link: https://blog.csdn.net/qq_46632290/article/details/112019066
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
利用爬虫技术获取英语单词,并通过tkinter库实现猜单词游戏
效果图如下:
你需要掌握的知识:
1.tkinter库
2.爬虫技术
总之,简单易懂,源代码如下。
#无网络条件下的单词表
# words=['abstract', 'abstraction', 'accomplish', 'accuracy', 'affiliated', 'algorithm', 'algorithmic', 'alias', 'aliasing', 'allocate', 'alternative', 'ambiguous', 'anticipate', 'apparatus', 'arbitrary', 'archery', 'architecture', 'argument', 'arithmetic', 'ascending', 'assert', 'assignment', 'asymptotic', 'automobile', 'balance', 'binary', 'bind', 'bisection', 'blank', 'block', 'bookmark', 'bound', 'bundle', 'calculator', 'canopy', 'capitalize', 'capture', 'cardiovascular', 'cascade', 'category', 'checker', 'circumference', 'clause', 'clue', 'cluster', 'code', 'coherent', 'collection', 'comma', 'command', 'comparison', 'compiler', 'complexity', 'compound', 'computable', 'computation', 'computational', 'compute', 'concatenate', 'concatenation', 'conceptualize', 'conditional', 'configuration', 'conform', 'conquer', 'console', 'construct', 'convert', 'correspond', 'corresponding', 'covert', 'crash', 'crucial', 'cube', 'cumbersome', 'current', 'dealt', 'debug', 'decimal', 'declarative', 'decode', 'deduce', 'default', 'defensive', 'demo', 'denote', 'deposit', 'derivative', 'deviation', 'diagram', 'dictionary', 'difference', 'disc', 'discretion', 'disregard', 'distinct', 'distribution', 'division', 'divisor', 'doctorate', 'documentation', 'driver', 'dub', 'duplicate', 'ease', 'editor', 'encapsulate', 'encapsulation', 'endpoint', 'engage', 'enigma', 'enroll', 'entry', 'enumeration', 'environment', 'epsilon', 'equivalent', 'essentially', 'evaluate', 'exception', 'execute', 'exhaustive', 'exponentiation', 'exterminate', 'factorial', 'fetal', 'fix', 'flag', 'flexibility', 'float', 'formalism', 'fraction', 'frame', 'generalization', 'generate', 'gestation', 'gigabyte', 'guarantee', 'GUI', 'halt', 'handle', 'handler', 'hence', 'heuristic', 'hierarchy', 'hint', 'hypothesis', 'identifier', 'illustrate', 'immutable', 'imperative', 'implement', 'implementation', 'implication', 'import', 'inclusive', 'incorporate', 'increment', 'indentation', 'index', 'indicate', 'indication', 'indirection', 'induction']
##猜单词游戏,利用网络爬虫实现单词库的获取,请在有网络的情况下使用
import random
import time
from urllib import request
from lxml import etree
import tkinter as tk
from tkinter import*
from tkinter import ttk
#利用tkinter库实现
#词汇表
words=[]
class Guess_word:
def __init__(self):
self.get_words()
self.win_times=0
self.lose_times=0
self.final_time=' '
self.gui()
def get_words(self):
def Get_Shanbay(page):
url="https://www.shanbay.com/wordlist/104899/202159/?page=%s"%page
rsp=request.urlopen(url)
html=rsp.read()
html=etree.HTML(html)
tr_list=html.xpath("//tr")
for tr in tr_list:
strong = tr.xpath('.//strong')
if len(strong):
name=strong[0].text.strip()
words.append(name)
for i in range(1,10):
Get_Shanbay(i)
print('爬取单词中……')
def shuffle_word(self,word):
list_word=list(word)
random.shuffle(list_word)
return ''.join(list_word)
def gui(self):
self.start()
self.main_gui()
def main_gui(self):
self.root=Tk()
self.root.title('hangman')
self.root.geometry('+0+0')
self.root.geometry('1000x800')
Label(self.root,text="Welcome to the word guessing game!", bg='green',font=('Arial', 12), fg="white",width=50, height=2).pack()
number=tk.StringVar()
self.Listchoose=ttk.Combobox(self.root,width=12,textvariable=number,state='readonly')
self.Listchoose['values']=['娱乐模式','时间模式']
self.Listchoose.bind("<<ComboboxSelected>>",self.mode)
self.Listchoose.pack()
self.Listchoose.set('请选择游戏模式')
self.root.mainloop()
def mode(self,event):
self.root2=Tk()
self.root2.title('hangman')
self.root2.geometry('+0+0')
self.root2.geometry('1000x800')
self.label=Label(self.root2,text="Welcome to the word guessing game!", bg='green',font=('Arial', 12), fg="white",width=50, height=2)
self.label.pack()
self.button2=tk.Button(self.root2,text="退出",bd=4,bg="yellow",activebackground="orange",command=self.Quit,padx=100)
self.button2.pack(side=tk.LEFT)
mode_name=self.Listchoose.get()
if(mode_name=='娱乐模式'):
self.mode1()
else:
self.mode2()
self.root2.mainloop()
def mode1(self):
self.display()
def judge(event):
if self.entry.get()==self.correct_word:
self.win_times+=1
self.label.configure(text="Congratulations! You're right! ",bg='red')
else:
self.lose_times+=1
self.label.configure(text="Sorry! You're wrong! And the correct word is "+self.correct_word+".",bg='blue')
self.entry.bind("<Return>",judge)
self.button1=tk.Button(self.root2,text="下一题",bd=4,bg="orange",activebackground="yellow",command=self.next1,padx=100)
self.button1.pack(side=tk.RIGHT)
def mode2(self):
messagebox.showinfo("提醒","请在十秒之前内写出你的答案!")
self.get_final_time()
self.get_time()
self.display()
def judge(event):
self.final_time=' '
if self.entry.get()==self.correct_word:
self.win_times+=1
messagebox.showinfo("correct!","Congratulations! You're right!")
self.time_over('0003.gif','耶!')
self.label.configure(text="Congratulations! You're right! ",bg='red')
else:
self.lose_times+=1
messagebox.showinfo("Wrong answer","Sorry! You're wrong! And the correct word is "+self.correct_word+".")
self.time_over('0004.gif','呜呜~')
self.label.configure(text="Sorry! You're wrong! And the correct word is "+self.correct_word+".",bg='blue')
self.entry.bind("<Return>",judge)
self.button2=tk.Button(self.root2,text="下一题",bd=4,bg="orange",activebackground="yellow",command=self.next2,padx=100)
self.button2.pack(side=tk.RIGHT)
def display(self):
self.correct_word,shuffle_word=self.get_correct_shuffle_word()
self.label1=Label(self.root2, text='Disordered word: '+shuffle_word,font=('楷体', 14))
self.label1.place(x=10, y=80)
Label(self.root2, text='Guess the word:', font=('楷体', 14)).place(x=10, y=120)
num=tk.StringVar()
self.entry=tk.Entry(self.root2,textvariable=num,font=('Arial', 10))
self.entry.place(x=180,y=125)
def get_final_time(self):
long=10 #答题时长
hms=time.strftime('%H %M %S').split()
allsecond=int(hms[0])*3600+int(hms[1])*60+int(hms[2])+long
strtime=allsecond//3600
h=str(allsecond//3600)
m=str(allsecond%3600//60)
s=str(allsecond%3600%60)
if len(h)==1:
h='0'+h
if len(m)==1:
m='0'+m
if len(s)==1:
s='0'+s
self.final_time=h+':'+m+':'+s
def time_over(self,img,text):
self.root3=Toplevel()
self.root3.title('Welcome to hangman!')
self.root3.geometry('+0+0')
self.root3.geometry('800x600')
self.picture(self.root3,2,img)
button=Button(self.root3,text=text,bd=4,bg="orange",activebackground="yellow",command=self.Exit,padx=50)
button.pack()
def Exit(self):
self.root3.destroy()
def get_time(self):
Time=time.strftime('%Y-%m-%d %H:%M:%S')
Label(self.root2, text='当前时间:', bg='gold', font=28).place(x=380, y=50)
clock=Label(self.root2,text=Time,font=28)
clock.place(x=465, y=50)
if Time[11:]==self.final_time:
messagebox.showinfo("超时",'时间到了!正确答案是: '+self.correct_word)
self.time_over('0002.gif','别骂了别骂了')
clock.after(1000,self.get_time)
def Quit(self):
messagebox.showinfo('战绩',f'您在这次游戏中共答对{self.win_times}道题,答错{self.lose_times}道题')
self.win_times=0
self.lose_times=0
self.root2.destroy()
def next1(self):
self.entry.delete(0,'end')
self.button1.destroy()
self.label1.destroy()
self.label.configure(text="Welcome to the word guessing game!", bg='green')
self.mode1()
def next2(self):
self.entry.delete(0,'end')
self.button2.destroy()
self.label1.destroy()
self.label.configure(text="Welcome to the word guessing game!", bg='green')
self.mode2()
def get_correct_shuffle_word(self):
correct_word=random.choice(words)
return correct_word,self.shuffle_word(correct_word)
def start(self):
self.root1=Tk()
self.root1.title('Welcome to hangman!')
self.root1.geometry('+0+0')
self.root1.geometry('800x600')
Label(self.root1,text='我 爱 记 单 词 ', fg='red', bg='yellow',font=('宋体', 30)).pack(side='top')
self.picture(self.root1,12,'0001.gif')
button1=Button(self.root1,text="进入猜单词游戏",bd=4,bg="orange",activebackground="yellow",command=self.Start,padx=50)
button1.pack()
self.root1.mainloop()
def picture(self,pos,numIdx,img):
frames=[PhotoImage(file=img,format='gif -index %i' %(i)) for i in range(numIdx)]
def update(idx):
frame = frames[idx]
idx+=1
label.configure(image=frame)
pos.after(100, update, idx%numIdx)
self.labelframe=LabelFrame(pos,text='图片展示',height=500,width=600)
self.labelframe.pack(padx=10,pady=10)
self.labelframe.pack_propagate(0)
label=Label(self.labelframe)
label.pack()
pos.after(0,update, 0)
def Start(self):
messagebox.showinfo("提示","你正在进入猜单词游戏!\n你准备好了吗?")
self.root1.destroy()
if __name__=='__main__':
guess_word=Guess_word()
代码中还有很多不尽人意的地方,由于作者技术水平的限制,暂时没有实现各种已有的设计理念,比如,利用多线程设计一个PK模式,图形界面的软件应用优化等等,感兴趣的哥哥姐姐们不妨试试。我在评论区静候你们的佳音。
Recommend
-
75
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter :
-
90
-
61
今天七夕,还下着雨,刚好想做一个下着爱心雨的特效 准备图片素材 1、美图秀秀找一个爱心图,大小就50*50就可以,生成的是一个png格式文件 2、由于canvas.create_image只支持gif
-
33
有问题,上知乎。知乎是中文互联网知名知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。
-
29
前言 GUI(图形用户界面) 想必大家都不陌生,简单来说就是将代码变成可以交互式操作的界面。在Python中就提供了多个图形开发界面的库,比如 Tkinter...
-
11
Tkinter是Python附带的标准GUI工具包。它易于使用,但支持的部件较少。其他的比较有名的GUI工具包有wxPytohn,PyQt,PyGTK。下面总结了一些常用的GUI效果的实现方式。 Splash Splash就是程序启动界面(主界面显示前的界面),比如手机APP打开后...
-
5
用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器 ...
-
3
深信服:并未利用爬虫技术窃取 2.1 亿条简历数据 10小时前 钛媒体App 2月11日消息,针对网传的“深信服利用爬虫技术窃取2.1亿条简历数据”的...
-
2
61 个回答火锅学姐爱吃火锅的女研究生~
-
9
V2EX › 分享发现 英语零基础背单词半年 83f420984...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK