GUI题目题解
import tkinter as tk
import tkinter.messagebox as messagebox
user_table = {
'LittleLamb':'bababa',
'Foo @ a bar':'FooledByABar',
'admin':'123456'
}
login = tk.Tk()
login.geometry('280x80')
login.title("登录到-DDL管理器")
label_user = tk.Label(login,text="用户名")
label_pwd = tk.Label(login,text="密码")
text_username = tk.Text(login,height=1,width=20)
text_pwd = tk.Entry(login,show='*') # 使用Entry组件,不直接显示密码明文(不要求)
# text_pwd = tk.Text(login,height=1,width=20) # 使用普通的Text组件,显示明文
btn_login = tk.Button(login,text="登录",command=lambda:enter())
label_user.grid(column=0,row=0)
text_username.grid(column=1,row=0)
label_pwd.grid(column=0,row=1)
text_pwd.grid(column=1,row=1)
btn_login.grid(row=2)
def enter():
username = text_username.get(1.0,tk.END).strip()
password = text_pwd.get()
print(username)
print(password)
if len(username) == 0:
messagebox.showerror("登录失败","请输入用户名!")
elif len(password) == 0:
messagebox.showerror("登录失败","请输入密码!")
elif username in user_table and user_table[username] == password:
login.destroy()
make_top(username)
else:
messagebox.showerror("登录失败","用户名或密码错误!")
def make_top(username):
top = tk.Tk()
top.title("%s的DDL管理器"%username)
top.geometry('400x300')
ddls = []
## Menu
menubar = tk.Menu(top)
edit = tk.Menu(menubar,tearoff=1)
display_ddl = tk.StringVar(top)
display_ddl.set("还没有DDL")
display_ddl_text = tk.Label(top,textvariable=display_ddl,justify=tk.LEFT)
display_ddl_text.pack(expand=1)
def update_board():
s = ''
for name,des,ddl in ddls:
s += '-'*30 + "\n事件:%s\n描述:%s\nddl:%s\n"%(name,des[:30],ddl)
display_ddl.set(s)
def add_new():
ask = tk.Tk()
ask.title("添加DDL")
label_name = tk.Label(ask,text="名称")
label_des = tk.Label(ask,text="描述")
label_ddl = tk.Label(ask,text="Deadline")
text_name = tk.Text(ask,height=1,width=30)
text_des = tk.Text(ask,height=5,width=30)
text_ddl = tk.Text(ask,height=1,width=30)
label_name.grid(row=0,column=0)
text_name.grid(row=0,column=1)
label_des.grid(row=1,column=0)
text_des.grid(row=1,column=1)
label_ddl.grid(row=2,column=0)
text_ddl.grid(row=2,column=1)
def add_ddl():
name = text_name.get(1.0,tk.END).strip()
des = text_des.get(1.0,tk.END).strip()
ddl = text_ddl.get(1.0,tk.END).strip()
ddls.append( (name,des,ddl) )
update_board()
ask.destroy()
btn_add = tk.Button(ask,text="添加",command=add_ddl)
btn_cancel = tk.Button(ask,text="取消",command=lambda:ask.destroy())
btn_add.grid(row=3,column=0)
btn_cancel.grid(row=3,column=1)
def show_author():
messagebox.showinfo("关于作者","我是北航XXX书院XX小班的XX,学号XXX+一些自由发挥内容")
edit.add_command(label="添加DDL",command=add_new)
about = tk.Menu(menubar,tearoff=0)
about.add_command(label="作者",command=show_author)
menubar.add_cascade(label="编辑",menu=edit)
menubar.add_cascade(label="关于",menu=about)
top['menu'] = menubar
login.mainloop()
这道题是课上题目改编的,合理地把PPT上的代码组合起来基本就可以实现所需的功能.问题比较多的是页面切换环节,也就是登陆之后如何切换到另一个页面.这里不要求使用高级的控件,直接destroy掉之前的页面,然后新建一个就可以了.
上面这份代码是来自出题人提供的标程,中间有很多细节设置,仅供参考.
大作业指导
评分问题说明
作业分为必做和选做两个部分,必做如果全部做完的话,会得到基础分.每完成一个选做,会在基础分的基础上进行加分.各个题目的基础分是不一样的.因为每道题必做所需要的时间,需要自学的内容量都是不同的,这样更公平.当然,这并不代表着选后面的题目一定比前面的题目的分数要高,分数是由必做部分和选做部分的实现情况共同决定的.
目前来看,其实第五题是最简单的
第三方库的安装
- 命令行安装
例如要安装Pygame这个库,先按住Win+R,然后在弹出的窗口中输出cmd,回车,就会出现黑色背景的命令提示符.然后在其中输入
pip install pygame
就可以完成安装.
这里推荐从清华镜像下载所需的库文件,可以节省很多时间,命令行参数如下:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame
- VSCode安装
和命令行安装基本上一样,只不过输入指令的位置转移到了VSCode的终端,其余参数不变.
每个人的Python安装情况是不一样的,例如有的人没有把Anaconda添加到环境变量中,这些差异可能会在装库的过程中带来问题.故以上内容仅供参考,遇到报错后可自行在网上查询报错的原因及解决办法.
同化棋
首先声明:之所以单独把这道题列出来,是因为在大作业指导书中,这道题相对于其他题给出的参考链接较少,考虑到公平性,在这次周报中做了一个补充指导.
Pygame基本教程:
https://www.jianshu.com/p/17a8ff70e00f
导入图片:
https://www.cnblogs.com/yangfan2018/p/8735066.html
鼠标事件:
https://www.cnblogs.com/msxh/p/4979380.html
本文地址: Python第十一周周报