实验九 GUI开发

实验九 GUI开发

一、实验学时:2学时

二、实验目的

  1. 理解tkinter标准库的用法。
  2. 熟悉创建窗体和组件的方法。
  3. 熟悉tkinter组件属性及其作用和设置方法。
  4. 了解如何为tkinter组件绑定事件处理方法。

三、实验内容

  1. Tkinter实现用户登录界面。建立一个文本文件users.txt,其中每一行存储一个用户的名字和密码,二者之间使用冒号分割,例如“admin:123456”。用户输入名字和密码后,单击“Login”按钮,根据文件users.txt中存储的信息判断用户输入是否正确。如果不正确就提示“用户名或者密码不正确”,如果正确就提示“登录成功”。请将界面中的文字全部改为中文。
  2. 编写带有图形化界面的猜数字游戏,数字为100以内整数。用户输入猜测值,如果正确,弹出“您猜对了!”消息框,否则提示“猜小了”或者“猜大了”消息框。

四、实验结果

  1. Tkinter实现用户登录界面。建立一个文本文件users.txt,其中每一行存储一个用户的名字和密码,二者之间使用冒号分割,例如“admin:123456”。用户输入名字和密码后,单击“Login”按钮,根据文件users.txt中存储的信息判断用户输入是否正确。如果不正确就提示“用户名或者密码不正确”,如果正确就提示“登录成功”。请将界面中的文字全部改为中文

    程序思路:通过文件读取users.txt中的名字和密码,然后在Login函数中与文本框中名字和密码进行匹配即可。

    程序代码:

    """
    程序名:实验9.1.py
    功能:Tkinter实现用户登录界面。
    建立一个文本文件users.txt,其中每一行存储一个用户的名字和密码,二者之间使用冒号分割,例如“admin:123456”。
    用户输入名字和密码后,单击“Login”按钮,根据文件users.txt中存储的信息判断用户输入是否正确。
    如果不正确就提示“用户名或者密码不正确”,如果正确就提示“登录成功”。
    请将界面中的文字全部改为中文。
    日期:2022.6.4
    版本:1.0
    """
    import tkinter as tk
    import tkinter.messagebox
    import os
    
    # 窗口创建
    root = tk.Tk()
    # 窗口大小
    root['height'] = 140
    root['width'] = 200
    # 窗口标签
    root.title('登录')
    # 用户名标签
    labelName = tk.Label(root,
                         text='用户名:',
                         justify=tkinter.RIGHT,
                         anchor='e',
                         width=80)
    labelName.place(x=0, y=10, width=80, height=20)
    # 用户名文本框
    varName = tk.StringVar(root, value='')
    entryName = tk.Entry(root, width=80, textvariable=varName)
    entryName.place(x=90, y=10, width=80, height=20)
    # 密码标签
    labelPwd = tk.Label(root,
                        text='密码:',
                        justify=tk.RIGHT,
                        anchor='e',
                        width=80)
    labelPwd.place(x=0, y=40, width=80, height=20)
    # 密码文本框
    varPwd = tk.StringVar(root, value='')
    entryPwd = tk.Entry(root,
                        show='*',
                        width=80,
                        textvariable=varPwd)
    entryPwd.place(x=90, y=40, width=80, height=20)
    
    
    # 登录按钮事件处理函数
    def login():
        # 获取用户名和密码
        name = entryName.get()
        pwd = entryPwd.get()
        with open('users.txt', 'r') as fp:
            for line in fp:
                name1, pwd1 = line.strip().split(':')
                if name == name1 and pwd == pwd1:
                    tk.messagebox.showinfo(title='恭喜',
                                           message=f'{name1}登录成功!')
                    break
            else:
                tk.messagebox.showerror('警告',
                                        message='用户名或者密码不正确!')
    
    
    # 创建登录按钮,设置按钮事件处理
    buttonOk = tkinter.Button(root,
                              text='登录',
                              command=login)
    buttonOk.place(x=30, y=100, width=50, height=20)
    
    
    # 取消按钮事件处理函数
    def cancel():
        # 清空输入用户名和密码
        varName.set('')
        varPwd.set('')
    
    
    # 创建取消按钮,设置按钮事件处理
    buttonCancel = tk.Button(root,
                             text='取消',
                             command=cancel)
    buttonCancel.place(x=90, y=100, width=50, height=20)
    
    # 启动消息循环
    tk.mainloop()
    

    运行结果截图:
    图片描述
    图片描述
    图片描述

  2. 编写带有图形化界面的猜数字游戏,数字为100以内整数。用户输入猜测值,如果正确,弹出“您猜对了!”消息框,否则提示“猜小了”或者“猜大了”消息框。

    题目思路:利用randint()函数去生成100以内的整数,接着在ok()函数中判断文本框中是否与答案相等,大则提醒猜大了,小则猜小了。如果判断正确则提醒猜对了的同时另外重新设置随机数即可。

    程序代码:

    """
    程序名:实验9.2.py
    功能:编写带有图形化界面的猜数字游戏,数字为100以内整数。
    用户输入猜测值,如果正确,弹出“您猜对了!”消息框,否则提示“猜小了”或者“猜大了”消息框。
    日期:2022.6.4
    版本:1.0
    """
    import tkinter as tk
    import tkinter.messagebox
    import os
    import random
    
    # 窗口创建
    root = tk.Tk()
    # 窗口大小
    root['height'] = 140
    root['width'] = 200
    # 窗口标签
    root.title('猜数')
    # 答案
    answer = random.randint(0, 99)
    # 数字标签
    labelName = tk.Label(root,
                         text='请输入数字:',
                         justify=tkinter.RIGHT,
                         anchor='e',
                         width=80)
    labelName.place(x=0, y=30, width=80, height=20)
    # 数字文本框
    varNum = tk.StringVar(root, value='')
    entryName = tk.Entry(root, width=80, textvariable=varNum)
    entryName.place(x=90, y=30, width=80, height=20)
    
    
    # 确认按钮事件处理函数
    def ok():
        global answer
        # 获取输入数字
        num = entryName.get()
        if int(num) == answer:
            tk.messagebox.showinfo(title='恭喜',
                                   message='你猜对啦!')
            tk.messagebox.showinfo(title='提醒',
                                   message='答案已重置!')
            answer = random.randint(0, 99)
        else:
            if int(num) < answer:
                tk.messagebox.showinfo(title='抱歉',
                                       message='你猜的数小啦!')
            else:
                tk.messagebox.showinfo(title='抱歉',
                                       message='你猜的数大啦!')
    
    # 创建确认按钮,设置按钮事件处理
    buttonOk = tkinter.Button(root,
                              text='确认',
                              command=ok)
    buttonOk.place(x=45, y=100, width=50, height=20)
    
    
    # 取消按钮事件处理函数
    def cancel():
        # 清空输入数字
        varNum.set('')
    
    
    # 创建取消按钮,设置按钮事件处理
    buttonCancel = tk.Button(root,
                             text='取消',
                             command=cancel)
    buttonCancel.place(x=110, y=100, width=50, height=20)
    
    # 启动消息循环
    tk.mainloop()
    

    运行结果截图:
    图片描述
    图片描述
    图片描述
    图片描述

五、实验小结

问题与解决方法:

  1. 在写tkinter程序中,程序并没有语法错误但窗口并没有显示出来。

    解决方法:没有写出tk.mainloop()启动消息循环,加上这句以后就会显示出来。

心得体会:

  1. tkinter是一个非常好用的GUI开发库,里面有特别多的现成的函数,可以让人在很方便的情况下就建设出图形化窗口等,学到现在感觉才是在学习python的重要内容,也就是对之前的python基础的实践。
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一只大狸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值