实验九 GUI开发
一、实验学时:2学时
二、实验目的
- 理解tkinter标准库的用法。
- 熟悉创建窗体和组件的方法。
- 熟悉tkinter组件属性及其作用和设置方法。
- 了解如何为tkinter组件绑定事件处理方法。
三、实验内容
- Tkinter实现用户登录界面。建立一个文本文件users.txt,其中每一行存储一个用户的名字和密码,二者之间使用冒号分割,例如“admin:123456”。用户输入名字和密码后,单击“Login”按钮,根据文件users.txt中存储的信息判断用户输入是否正确。如果不正确就提示“用户名或者密码不正确”,如果正确就提示“登录成功”。请将界面中的文字全部改为中文。
- 编写带有图形化界面的猜数字游戏,数字为100以内整数。用户输入猜测值,如果正确,弹出“您猜对了!”消息框,否则提示“猜小了”或者“猜大了”消息框。
四、实验结果
-
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()
运行结果截图:
-
编写带有图形化界面的猜数字游戏,数字为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()
运行结果截图:
五、实验小结
问题与解决方法:
-
在写tkinter程序中,程序并没有语法错误但窗口并没有显示出来。
解决方法:没有写出tk.mainloop()启动消息循环,加上这句以后就会显示出来。
心得体会:
- tkinter是一个非常好用的GUI开发库,里面有特别多的现成的函数,可以让人在很方便的情况下就建设出图形化窗口等,学到现在感觉才是在学习python的重要内容,也就是对之前的python基础的实践。