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掉之前的页面,然后新建一个就可以了.

上面这份代码是来自出题人提供的标程,中间有很多细节设置,仅供参考.

大作业指导

评分问题说明

作业分为必做和选做两个部分,必做如果全部做完的话,会得到基础分.每完成一个选做,会在基础分的基础上进行加分.各个题目的基础分是不一样的.因为每道题必做所需要的时间,需要自学的内容量都是不同的,这样更公平.当然,这并不代表着选后面的题目一定比前面的题目的分数要高,分数是由必做部分和选做部分的实现情况共同决定的.

目前来看,其实第五题是最简单的

第三方库的安装

  1. 命令行安装

例如要安装Pygame这个库,先按住Win+R,然后在弹出的窗口中输出cmd,回车,就会出现黑色背景的命令提示符.然后在其中输入

pip install pygame

就可以完成安装.

这里推荐从清华镜像下载所需的库文件,可以节省很多时间,命令行参数如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame
  1. 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

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...