python文件操作图形化——python实战项目:单词练习系统

2023-11-15

python 文件操作与图形化编程

文件基本操作

D:\Python\example.txt

  • 文件路径:D:\Python\
  • 文件名:example
  • 文件扩展名:.txt
    文件的组织形式和表达数据的方式更有效、更灵活。按编码方式一般分为两大类型:文本文件二进制文件

Python对文件采用统一的操作步骤:打开—操作—关闭

  1. open()
# 变量名=open(文件名,打开模式,文件编码)
f=open('example.txt','r',encoding='utf-8')
  1. close()
f.close()
  1. 文件读取
    当文件以文本文件方式打开时,读写按照字符串方式进行操作,并用当前计算机使用的编码或指定的编码。当文件以二进制文件方式打开时,读写按照字节流方式进行操作。

  2. 文件写入
    file.seek(offset):改变当前文件操作指针的位置。offset:0表示文件开头,1当前位置,2文件结尾

图形化界面tkinter

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这些第三方库。

  1. 主窗体创建运行
  • 图形用户界面程序都需要一个根窗口,也叫主窗口,它就好像绘画时需要的画纸一样,tkinterᨀ供创建主窗口的构造函数Tk()
  • 窗口和组件都创建好后,需要运行,程序要不停地告诉窗口管理对象GM(Geometry Manager)有一个组件产生
# 创建
root = Tk()
# 运行
root.mainloop()
  1. tkinter的组件
    canvas,Frame,Label…

  2. 组件属性
    background,borderwidth,cursor…

单词练习系统

需求:设计单词练习系统,建立一个单词库,可以从单词库中随机抽取单词进行练习。练习方式有英译中、中译英、拼写填空,对于回答正确的问题会给出提示,并增加积分,错误的问题只有ᨀ示,不增加积分。练习完成后可以查看出错的单词,并对错误的单词进行次数统计。

  1. 初始化设置
    创建系统类,在类中创建构造方法,设置各种初始化变量。
    (1)创建tkinter窗口对象,设置窗口属性。
    (2)设置窗口中需要使用的变量,如:当前积分、显示的随机单词,以及回答ᨀ示信息。
    (3)创建单选按钮组名。创建各类变量,相当于是全局变量。
    (1)创建单词列表变量。
    (2)创建错词列表变量。
    (3)创建显示单词变量。
    (4)创建拼写填空的变量。
    (5)创建随机数变量(用于从单词表中随机抽取单词)。
    (6)引用各种方法:如界面设置布局、窗体运行方法。
    初始化代码:
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()
  1. 单词读取设计
    从单词库文件中将单词读取出来。可以用数据库,也可以使用文件,此处用的是文件。文件中的每一行由一个单词的中英文构成。
    打开文件读取数据,先对数据进行清洗,按换行符将它们分离成列表,一个单词为一个元素。再对列表进行遍历,对于遍历到的每一个元素即单词再次进行分离,即每个单词分成中文和英文两个元素,将分离得到的列表追加到初始化设置中创建的单词列表变量中。
    代码:
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)
  1. 单词练习方式模块设计
    (1)根据练习的单选按钮,标签显示不同的内容。在文本输入框中输入相应的内容,单击“确定”按钮进行判断。
    (2)由单选按钮的command事件链接到相应的方法中
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)
  1. 正误判断设计
    先判断练习方式是哪一种,再获取文本框输入的内容,将获取的内容与对应的单词表内容进行比对,如果相同,则增加积分,给出赞扬;如果不同,则给出鼓励,并将对应单词加到错词表。
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')
  1. 退出设计
def exit(self):
    self.root.destroy()
  1. 错词表设计
    单击“查看错词表”按钮调用错词方法,打开新的窗口,原窗口隐藏。在新窗口将错词表中的内容以表格的形式列出来,并显示错误次数。
    代码
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)
  1. 返回设计
def back(self):
    self.wt.destroy()
    self.root.update()
    self.root.deiconify()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python文件操作图形化——python实战项目:单词练习系统 的相关文章

随机推荐

  • 初探TVM--TVM优化resnet50

    测试用TVM编译出的resnet50在CPU上的效果 测试resnet50在CPU上的效果 编译后的resnet50模型 图像预处理 运行编译后的模型 查看输出结果 resnet50自动调优 模型调优 auto tune 编译调优过的模型
  • Java: Observer Patterns

    版权所有 2022 涂聚文有限公司 许可信息查看 描述 观察者模式 Observer Patterns 也叫做发布 订阅模式 Publist Subscribe 模型 视图模式 Model View 源 监听器 Source Listene
  • [毕业设计]最新通信工程专业毕设选题题目推荐汇总

    文章目录 1前言 2 如何选题 3 通信工程选题方向 3 1 移动通信方向 3 2 嵌入式开发方向 3 3 人工智能方向 3 4 物联网方向 3 5 算法研究方向 3 6 移动应用开发方向 3 7 网络通信方向 3 8 学长作品展示 4 最
  • DevOps到底是什么意思?

    提到DevOps这个词 我相信很多人一定不会陌生 作为一个热门的概念 DevOps近年来频频出现在各大技术社区和媒体的文章中 备受行业大咖的追捧 也吸引了很多吃瓜群众的围观 那么 DevOps是什么呢 有人说它是一种方法 也有人说它是一种工
  • 为什么要在测试集中不需要使用fit_transform的原因?

    假设我们有一组数据 10 20 30 则标准化之后的数据为 array 1 22474487 0 1 22474487 这组数据的均值为 20 0 标准差为 8 16496580927726 标准化之后的这组数据 其标准差为1 均值为0 假
  • 张钜楷:1.22黄金原油下周实时行情趋势分析及黄金独家操作建议指导

    黄金行情走势分析 周五 1月21日 国际金价进一步走低 远离隔夜创下的11月22日以来高位1847 87美元 盎司 金价对美国升息很敏感 利率上升会降低持有无孳息黄金的吸引力 但金价周线有望连续第二周收阳 本周到目前为止累计涨幅逾0 8 因
  • sql查找一列中某一数值出现次数大于2的记录

    sql查找一列中某一数值出现次数大于2的记录 百度知道
  • 机械臂控制——4

    Robot Drivers 机器人驱动程序可以控制连接到计算机的真实机器人 机器人驱动程序使用通用软件接口来控制和监视特定的机器人控制器 使计算机能够控制工业机器人 机器人驱动程序提供了脱机编程的替代方案 程序被模拟 生成 然后传输到机器人
  • python人工智能应用实例_90后博士说,从Python到人工智能只差这35个趣味案例,越学越有趣...

    有趣的生活每个人都向往 有趣的Python编程学习方式却不是每个人都体验过 以这35个趣味案例开始 让兴趣成为学习Python最好的动力 看看这35个趣味案例 几乎是每个案例都对应着一个Python的知识点 比如 以照猫画虎的案例 教你剖析
  • mysql中geometry类型的简单使用(搜索附近的人)

    mysql中geometry类型的简单使用 编写本文的目的 让和两天前的我一样的初学者 能够更快的使用geometry类型存储空间点数据 也是为了自己加深印象 更熟练的使用geometry类型 建表脚本 CREATE TABLE z gis
  • 微信小程序云开发教程一

    微信小程序云开发 初学者入门教程一 云开发环境搭建 本教程适合刚刚入门的小白 云开发为开发者提供完整的云端支持 弱化后端和运维概念 无需搭建服务器 使用平台提供的 API 进行核心业务开发 即可实现快速上线和迭代 同时这一能力 同开发者已经
  • Pandas数据分析初学--开始了解数据

    探索Chipotle快餐数据 作为一个Pandas初学者 今天用这道题目练手 分享出来 首先 impotr pandas as pd 1 将数据集存入一个名为chipo的数据框内 iris filename chipotle csv chi
  • SkyWalking链路追踪中Trace概念以及Trace与span的关系

    基本概念 在SkyWalking链路追踪中 Trace 追踪 是指一个请求或者一个操作从开始到结束的完整路径 它涵盖了分布式系统中所有相关组件的调用关系和性能信息 具体来说 Trace包含了一系列的span 跨度 每个span代表了一个组件
  • kibana使用_从kibana迁移到grafana作为elasticsearch的展现

    今天说说 我们为什么会选择从kibana迁移到grafana 并选用grafana作为elasticsearch的图表展现工具 文章中关于kinaba和grafana的对比会有些片面 勿喷 最一开始使用kibana ElasticSearc
  • java 正则表达式_a-z_0-9 validation,掌握Java-Bean Validation

    数据校验虽然简单 但是却是一个繁琐的事 我在无数的代码看到if判断参数 然后错了打日志抛异常 一片一片的这种代码 如果有点重复了 再弄出N个xxUtil来归纳代码 虽然这种做法可以达到效果 但是代码散乱 一个是编写麻烦 一个是不易阅读 Ja
  • Pyqt5设计打开电脑摄像头+拍照(转载)

    本片为利用Pyqt5设计一个可以打开摄像头进行拍照的Demo 我感觉以后可能会有用 记录一下 Demo运行视频 哈哈感觉很好玩 用到的模块安装 库 安装 作用 PyQt5 pip install PyQt5 界面设计 opencv pyth
  • [网络安全自学篇] 三十五.恶意代码攻击检测及恶意样本分析

    本文主要结合作者的 系统安全前沿 作业 论文及绿盟李东宏老师的博客 从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识 在学术界方面 用类似于综述来介绍攻击追踪溯源的不同方法 在产业界方面 主要参考李东宏老师从企业恶意样本分析的角度介绍
  • 单调递增队列(全过程图文实现 另附习题)

    什么是单调队列 有什么用 不妨用一个问题来说明单调队列的作用和操作 不断地向缓存数组里读入元素 也不时地去掉最老的元素 不定期的询问当前缓存数组里的最小的元素 最直接的方法 普通队列实现缓存数组 进队出队都是O 1 一次查询需要遍历当前队列
  • 手把手教你如何 远程控制另一台电脑 保姆教程

    现在win10可以实现两台电脑之间的远程控制 下面我就分享一下如何利用快速助手进行远程控制另一台电脑 每一步都有截图 实验环境 两台win10系统的电脑 一 打开电脑后 需要设置允许电脑进行远程控制 进入 控制面板 系统和安全 系统 远程控
  • python文件操作图形化——python实战项目:单词练习系统

    python 文件操作与图形化编程 目录 python 文件操作与图形化编程 文件基本操作 图形化界面tkinter 单词练习系统 文件基本操作 D Python example txt 文件路径 D Python 文件名 example