D:\Python\example.txt
Python对文件采用统一的操作步骤:打开—操作—关闭
# 变量名=open(文件名,打开模式,文件编码)
f=open('example.txt','r',encoding='utf-8')
f.close()
文件读取
当文件以文本文件方式打开时,读写按照字符串方式进行操作,并用当前计算机使用的编码或指定的编码。当文件以二进制文件方式打开时,读写按照字节流方式进行操作。
文件写入
file.seek(offset):改变当前文件操作指针的位置。offset:0表示文件开头,1当前位置,2文件结尾
tkinter是使用Python进行窗口视窗设计的模块。tkinter模块("Tk接口")是Python的标准Tk GUI工具包的接口。作为Python特定的GUI界面,它是一个图像的窗口,并且tkinter是Python自带的模块,可以编辑GUI界面,并且可以用GUI实现很多直观的功能,例如开发一个计算器或者开发一个有交互功能的小系统。
由于tkinter是Python内置的库,不用安装,所以只需在使用时导入tkinter模块:import tkinter,或者from tkinter import∗。
需要说明的是,虽然tkinter很好用,但是如果要开发一些大型的应用,tkinterᨀ供的功能还是太少了,需要使用wxPython、PyQt这些第三方库。
# 创建
root = Tk()
# 运行
root.mainloop()
tkinter的组件
canvas,Frame,Label…
组件属性
background,borderwidth,cursor…
需求:设计单词练习系统,建立一个单词库,可以从单词库中随机抽取单词进行练习。练习方式有英译中、中译英、拼写填空,对于回答正确的问题会给出提示,并增加积分,错误的问题只有ᨀ示,不增加积分。练习完成后可以查看出错的单词,并对错误的单词进行次数统计。
import tkinter
import tkinter.messagebox
import random
class Recite():
def __init__(self):
self.root = tkinter.Tk()
self.root.geometry('450*500')
self.root.title('xxr背单词')
self.root['bg'] = 'yellow'
self.word = tkinter.StringVar()
self.score = tkinter.StringVar()
self.fen = 0
self.score.set(0)
self.prompt = tkinter.StringVar()
self.prompt.set('你最棒~')
self.wrong = []
self.dic = []
self.word_list()
# print(len(self.dic))
self.radiolist = tkinter.IntVar()
self.fill = ''
self.space = ''
self.r = random.randint(0, len(self.dic) - 1)
self.word.set(self.dic[self.r][0])
self.layout()
self.root.mainloop()
def word_list(self):
f = open('words.txt', 'r', encoding='utf-8')
t = f.read().split('\n')
for d in t:
self.dic.append(d.split())
f.close()
主界面布局代码:
def layout(self):
lab1 = tkinter.Label(self.root,
text='xxr 背单词',
font=('宋体', 30),
bg='yellow')
lab1.pack(pady=20)
lab_score = tkinter.Label(self.root,
textvariable=self.score,
font=('宋体', 30),
fg='red',
bg='yellow')
lab_score.pack()
lab_2 = tkinter.Label(self.root, text='当前积分:', font=('宋体', 16), g='yellow')
lab_2.place(x=40, y=100)
lab_word = tkinter.Label(self.root,
textvariable=self.word,
font=('宋体', 20),
bg='white')
lab_word.place(x=130, y=140)
lab_prompt = tkinter.Label(self.root,
textvariable=self.prompt,
font=('宋体', 18),
fg='blue',
bg='yellow')
lab_prompt.place(x=150, y=250)
self.entry = tkinter.Entry(self.root, width=15, font=('宋体', 20))
self.entry.place(x=120, y=200)
r1 = tkinter.Radiobutton(self.root,
textvariable=self.radiolist,
value=0,
text='英译中',
command=self.select1,
bg='yellow')
r2 = tkinter.Radiobutton(self.root,
textvariable=self.radiolist,
value=1,
text='中译英',
command=self.select2,
bg='yellow')
r3 = tkinter.Radiobutton(self.root,
textvariable=self.radiolist,
value=2,
text='拼写填空',
command=self.select3,
bg='yellow')
self.radiolist.set(0)
r1.place(x=40, y=130)
r2.place(x=40, y=150)
r3.place(x=40, y=170)
but1 = tkinter.Button(self.root,
text='确定',
width=5,
font=('宋体', 15),
command=self.judge)
but1.place(x=130, y=300)
but2 = tkinter.Button(self.root,
text='退出',
width=5,
font=('宋体', 15),
command=self.exit)
but2.place(x=230, y=300)
but3 = tkinter.Button(self.root,
text='查看错词表',
width=10,
font=('宋体', 15),
command=self.wrong_word)
but3.place(x=130, y=400)
def select1(self):
self.r = random.randint(0,len(self.dic)-1)
self.word.set(self.dic[self.r][0])
def select2(self):
self.r = random.randint(0,len(self.dic)-1)
self.word.set(self.dic[self.r][1])
def select3(self):
self.r = random.randint(0,len(self.dic)-1)
word= self.dic[self.r][0]
k = random.randint(0,len(word)-1)
self.space = ''
for i in range(len(word)):
if i!=k:
self.space += word[i]
else:
self.space += '_'
self.fill = word[i]
self.space = self.space + '' + self.dic[self.r][1]
self.word.set(self.space)
def judge(self):
if self.radiolist.get() == 2:
s = self.entry.get().lower()
if s == self.fill:
self.prompt.set('太棒了')
self.fen += 1
self.score.set(self.fen)
else:
self.prompt.set('很遗憾,继续加油~')
self.wrong.append(self.dic[self.r])
self.r = random.randint(0, len(self.dic) - 1)
self.select3()
self.entry.delete(0, 'end')
else:
if self.radiolist.get() == 0:
e = 0
c = 1
elif self.radiolist.get() == 1:
e = 1
c = 0
word = self.dic[self.r][c]
s = self.entry.get()
if word == s:
self.prompt.set('太棒了')
self.fen += 1
self.score.set(self.fen)
else:
self.prompt.set('很遗憾,继续加油~')
self.wrong.append(self.dic[self.r])
self.r = random.randint(0, len(self.dic) - 1)
self.word.set(self.dic[self.r][e])
self.entry.delete(0, 'end')
def exit(self):
self.root.destroy()
def wrong_word(self):
self.root.withdraw()
self.wt = tkinter.Tk()
self.wt.title('错词表')
self.wt.geometry('450*500')
self.wt['bg'] = 'yellow'
lab_wr = tkinter.Label(self.wt,
text='本次练习错题表',
font=('宋体', 20),
bg='yellow')
lab_wr.place(x=100, y=10)
tree = ttk.Treeview(self.wt, show='headings', height=15)
tree.place(x=30, y=50)
tree['columns'] = ('1', '2', '3')
tree.column('1', width=110)
tree.column('2', width=110)
tree.column('3', width=110)
tree.heading('1', text='英文', anchor='center')
tree.heading('2', text='中文', anchor='center')
tree.heading('3', text='错误次数', anchor='center')
but_re = tkinter.Button(self.wt,
text='返回',
font=('宋体', 15),
command=self.back)
but_re.place(x=150, y=400)
self.wrong.sort(key=lambda x: x[0])
self.wrong.append(['', ''])
p = self.wrong[0][0]
c = 1
for w in range(1, len(self.wrong)):
if self.wrong[w][0] == p:
c += 1
else:
tree.insert("",
'end',
values=(self.wrong[w - 1][0], self.wrong[w - 1][1], c))
c = 1
p = self.wrong[w][0]
self.wt.protocol('WM_DELETE_WINDOM', self.back)
def back(self):
self.wt.destroy()
self.root.update()
self.root.deiconify()