tkinter/python:第一个GUI程序——制作一个数据录入界面

下图是在网上搜寻的一个案例图样,经过了调整修改,登录时界面图如下:

登录后点击百货店铺按钮,界面如下 

一、创建root窗口:

geometry接收一个字符串,也就是需要建立的窗口尺寸和位置,geometry('宽x高+x坐标+y坐标'),宽和高中间是英文字母x,不是中文的乘号。root.resizable(False, False)是固定窗口大小,最后需要调用root.mainloop(),保持窗口一直存在。

import tkinter

root = tkinter.Tk()
root.title('销售数据录入平台')
root.geometry('1000x660+460+100')
root.resizable(False, False)


def main():
    root.mainloop()


if __name__ == '__main__':
    main()

将整个root分成三个部分,一是最上面的黑色背景的顶部菜单栏控件,二是中间带图片的辅助信息控件,三是菜单栏点击后链接的下面主体控件。

二、建立顶部菜单栏控件:

顶部先用一个Frame作为容器,填充黑色背景。然后是左边是平台的名字,只需要显示,不用点击产生链接,用Label方法。后面的百货店铺、超市店铺、美食广场和登录用户是可以点击的按钮,用Button方法。Lable和Button两种方法的第一个参数都是上层容器,后面是文本、字体、前景色和背景色,然后直接调用place函数准确定位。

def head():
    frame = tkinter.Frame(root, bg='black')
    frame.place(width=1000, height=60)

    tkinter.Label(frame, text='销售数据录入平台', font=('黑体', 20), fg='white', bg='black').place(x=20, y=15)

    tkinter.Button(frame, text='百货店铺', font=('黑体', 12), fg='white', bg='black', command=body_store,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=330, y=20)
    tkinter.Button(frame, text='超市店铺', font=('黑体', 12), fg='white', bg='black', command=body_supermarket,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=490, y=20)
    tkinter.Button(frame, text='美食广场', font=('黑体', 12), fg='white', bg='black', command=body_food,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=650, y=20)
    tkinter.Button(frame, text='用户登录', font=('黑体', 12), fg='white', bg='black', command=login,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=810, y=20)


def body_store():
    print('百货店铺')
    pass


def body_supermarket():
    print('超市店铺')
    pass


def body_food():
    print('美食广场')
    pass


def login():
    print('登录用户')
    pass

这样就完成了菜单栏的控件布局,在main函数中增加head(),然后执行程序:

relief='flat', activeforeground='grey', overrelief='raised'三个参数分别实现效果:第一个是控制正常显示效果,第二个是按下鼠标左键时的效果,第三个是鼠标悬浮在按钮上的效果。

点击后可以看到控制台正确打印出信息:百货店铺 。

三、辅助信息控件

基本都差不多,只是增加了一个个图片的处理。

仍然是先给这部分一个单独Frame容器,填充颜色。然后是文字部分用Lable控件,其它用Button控件完成。

tkinter在处理图片的时候,如果包装到函数里面,图片就丢失了,变成了一个白块。

def information():
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=140, x=30, y=100)

    img = tkinter.PhotoImage(file='bg1.png')
    tkinter.Label(frame, image=img).place(width=230, height=120, x=10, y=10)

执行结果:

网上有介绍说是执行完后图片被释放了,修改方法是再增加一条代码:tkinter.Label.image = img

def information():
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=140, x=30, y=100)

    img = tkinter.PhotoImage(file='bg1.png')
    tkinter.Label(frame, image=img).place(width=230, height=120, x=10, y=10)
    tkinter.Label.image = img

这样确实也能实现,但是看着怪怪的的,而且在后面写登录函数再次使用这个图片时候,图片又神奇的消失了:

我想能不能在函数外部定义image呢?居然成立了。image = tkinter.PhotoImage(file='bg1.png')必须写在root = tkinter.Tk()的后面,如果写在 tkinter.Tk()前面会报错。

import tkinter

root = tkinter.Tk()
root.title('销售数据录入平台')
root.geometry('1000x660+460+100')
root.resizable(False, False)

color = '#48D1CC'
image = tkinter.PhotoImage(file='bg1.png')


def information():
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=140, x=30, y=100)

    tkinter.Label(frame, image=image).place(width=230, height=120, x=10, y=10)

这种写法至少现在的情况可以完美的解决tkinter在显示图片丢失的问题。而且再次使用该图片时可以直接赋值使用,没有发生再丢失现象。完整的辅助信息栏代码:

def information():
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=140, x=30, y=100)

    tkinter.Label(frame, image=image).place(width=230, height=120, x=10, y=10)
    tkinter.Label(frame, text='平台使用教程', font=('黑体', 25), fg='black', bg=color).place(x=265, y=25)

    tkinter.Button(frame, text='操作文档', font=('黑体', 12), fg='blue', bg=color, command=lambda: print('操作文档'),
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=520, y=37)
    tkinter.Button(frame, text='教学视频', font=('黑体', 12), fg='blue', bg=color, command=lambda: print('教学视频'),
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=620, y=37)
    tkinter.Button(frame, text='常见问题', font=('黑体', 12), fg='blue', bg=color, command=lambda: print('常见问题'),
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=720, y=37)

    text = '用户注册分自行注册和管理员后台注册,自行注册需确保管理员后台中注册权限已开启,\n\n点击新用户注册,填写注册信息进行注册,新入职人员需管理员后台开启权限。'
    tkinter.Label(frame, text=text, font=('黑体', 10), fg='black', bg=color, justify='left').place(x=265, y=83)
    

四、现在来写登录界面:

 登录界面需要分两部分,一个是已有用户验证密码登录,一个是新注册用户录入用户名及新密码。在弹出登录界面时,通过root.attributes('-disabled', 1)锁定根窗口,还需要调用prodocol函数,login_toplevel.protocol('WM_DELETE_WINDOW', root.quit)和根窗口建立协议,没有正常登录关闭登录窗口时关闭根窗口,否则根窗口将无法关闭了。

def login():
    print('登录用户')
    login_toplevel = tkinter.Toplevel(root)
    login_toplevel.title('用户登录')
    login_toplevel.geometry('250x200+835+400')
    login_toplevel.attributes('-topmost', 1)
    login_toplevel.resizable(False, False)
    login_toplevel.grab_set()
    login_toplevel.protocol('WM_DELETE_WINDOW', root.quit)

    tkinter.Label(login_toplevel, image=image).place(width=250, height=100, x=0, y=0)
    tkinter.Label(login_toplevel, text='用户', font=('黑体', 12)).place(width=50, height=25, x=20, y=105)
    tkinter.Label(login_toplevel, text='密码', font=('黑体', 12)).place(width=50, height=25, x=20, y=135)
    (user := tkinter.Entry(login_toplevel)).place(width=150, height=25, x=70, y=105)
    (password := tkinter.Entry(login_toplevel)).place(width=150, height=25, x=70, y=135)
    tkinter.Button(login_toplevel, text='登录', command=lambda: login_in()).place(width=100, height=30, x=20, y=165)
    tkinter.Button(login_toplevel, text='注册', command=lambda: register_in()).place(width=100, height=30, x=130, y=165)

    def login_in():
        print('登录')
        pass

    def register_in():
        print('注册')
        pass

这里用的海象赋值法:(:=),还挺有意思! 

 五、完善登录、注册方法

    def login_in():
        print('登录')
        if not (user.get() and password.get()):
            tkinter.messagebox.showerror('登录信息', '用户名或密码不能为空!', parent=login_toplevel)
        elif user.get() + ',' + password.get() in read_data():
            tkinter.messagebox.showinfo('登录信息', '登录成功', parent=login_toplevel)
            login_toplevel.destroy()
            root.attributes('-disable', 0)
            root.attributes('-topmost', 1)
        else:
            tkinter.messagebox.showwarning('登录信息', '用户名或密码错误!', parent=login_toplevel)

    def register_in():
        print('注册')
        register_toplevel = tkinter.Toplevel(root)
        register_toplevel.title('注册信息')
        register_toplevel.geometry('250x130+835+400')
        register_toplevel.resizable(False, False)
        register_toplevel.attributes('-topmost', 1)
        login_toplevel.attributes('-disabled', 1)
        register_toplevel.protocol('WM_DELETE_WINDOW', login_toplevel.quit)

        tkinter.Label(register_toplevel, text='新用户', font=('黑体', 12)).place(width=50, height=25, x=20, y=5)
        tkinter.Label(register_toplevel, text='新密码', font=('黑体', 12)).place(width=50, height=25, x=20, y=35)
        tkinter.Label(register_toplevel, text='新密码', font=('黑体', 12)).place(width=50, height=25, x=20, y=65)
        (new_user := tkinter.Entry(register_toplevel)).place(width=150, height=25, x=75, y=5)
        (password1 := tkinter.Entry(register_toplevel)).place(width=150, height=25, x=75, y=35)
        (password2 := tkinter.Entry(register_toplevel)).place(width=150, height=25, x=75, y=65)
        tkinter.Button(register_toplevel, text='注册', command=lambda: register_new()).place(width=100, height=30, x=20, y=95)
        tkinter.Button(register_toplevel, text='取消', command=lambda: register_toplevel.quit()).place(width=100, height=30, x=130, y=95)

        def register_new():
            if not (new_user.get() and password1.get()):
                tkinter.messagebox.showerror('注册提示', '用户名或密码不能为空!', parent=register_toplevel)
            elif password1.get() != password2.get():
                tkinter.messagebox.showerror('注册提示', '两次密码不一致!', parent=register_toplevel)
            else:
                tkinter.messagebox.showinfo('注册提示', '注册成功!', parent=register_toplevel)
                with open('data.csv', 'a') as file:
                    file.write(f'{new_user.get()},{password1.get()}\n')
                register_toplevel.destroy()
                login_toplevel.attributes('-disable', 0)

    def read_data():
        with open('data.csv', 'r') as file:
            return map(str.strip, file.readlines())

六、补充一些百货店铺信息:

 白色的线条是用Label标签完成

def body_store():
    print('百货店铺')
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=380, x=30, y=260)

    tkinter.Label(frame, bg='white').place(width=170, height=5, x=0, y=205)
    tkinter.Label(frame, bg='white').place(width=765, height=5, x=175, y=40)
    tkinter.Label(frame, bg='white').place(width=5, height=380, x=170, y=0)

    tkinter.Label(frame, text='销售数据', font=('黑体', 12), fg='black', bg=color).place(x=10, y=10)
    tkinter.Button(frame, text='批发客户管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发客户管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=50)
    tkinter.Button(frame, text='销售批发管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('销售批发管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=80)
    tkinter.Button(frame, text='批发价格管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发价格管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=110)
    tkinter.Button(frame, text='批发结算管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发结算管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=140)
    tkinter.Button(frame, text='批发人员管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发人员管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=170)

    tkinter.Label(frame, text='数据中心', font=('黑体', 12), fg='black', bg=color).place(x=10, y=220)
    tkinter.Button(frame, text='销售数据查询', font=('黑体', 10), bg=color, fg='black', command=lambda: print('销售数据查询'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=260)
    tkinter.Button(frame, text='库存数据查询', font=('黑体', 10), bg=color, fg='black', command=lambda: print('库存数据查询'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=290)

七、完整代码: 

import tkinter
import tkinter.messagebox

root = tkinter.Tk()
root.title('销售数据录入平台')
root.geometry('1000x660+460+100')
root.resizable(False, False)

color = '#48D1CC'
image = tkinter.PhotoImage(file='bg1.png')


def information():
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=140, x=30, y=100)

    tkinter.Label(frame, image=image).place(width=230, height=120, x=10, y=10)
    tkinter.Label(frame, text='平台使用教程', font=('黑体', 25), fg='black', bg=color).place(x=265, y=25)

    tkinter.Button(frame, text='操作文档', font=('黑体', 12), fg='blue', bg=color, command=lambda: print('操作文档'),
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=520, y=37)
    tkinter.Button(frame, text='教学视频', font=('黑体', 12), fg='blue', bg=color, command=lambda: print('教学视频'),
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=620, y=37)
    tkinter.Button(frame, text='常见问题', font=('黑体', 12), fg='blue', bg=color, command=lambda: print('常见问题'),
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=720, y=37)

    text = '用户注册分自行注册和管理员后台注册,自行注册需确保管理员后台中注册权限已开启,\n\n点击新用户注册,填写注册信息进行注册,新入职人员需管理员后台开启权限。'
    tkinter.Label(frame, text=text, font=('黑体', 10), fg='black', bg=color, justify='left').place(x=265, y=83)


def head():
    frame = tkinter.Frame(root, bg='black')
    frame.place(width=1000, height=60)

    tkinter.Label(frame, text='销售数据录入平台', font=('黑体', 20), fg='white', bg='black').place(x=20, y=15)

    tkinter.Button(frame, text='百货店铺', font=('黑体', 12), fg='white', bg='black', command=body_store,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=330, y=20)
    tkinter.Button(frame, text='超市店铺', font=('黑体', 12), fg='white', bg='black', command=body_supermarket,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=490, y=20)
    tkinter.Button(frame, text='美食广场', font=('黑体', 12), fg='white', bg='black', command=body_food,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=650, y=20)
    tkinter.Button(frame, text='用户登录', font=('黑体', 12), fg='white', bg='black', command=login,
                   relief='flat', activeforeground='grey', overrelief='raised').place(x=810, y=20)


def body_store():
    print('百货店铺')
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=380, x=30, y=260)

    tkinter.Label(frame, bg='white').place(width=170, height=5, x=0, y=205)
    tkinter.Label(frame, bg='white').place(width=765, height=5, x=175, y=40)
    tkinter.Label(frame, bg='white').place(width=5, height=380, x=170, y=0)

    tkinter.Label(frame, text='销售数据', font=('黑体', 12), fg='black', bg=color).place(x=10, y=10)
    tkinter.Button(frame, text='批发客户管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发客户管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=50)
    tkinter.Button(frame, text='销售批发管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('销售批发管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=80)
    tkinter.Button(frame, text='批发价格管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发价格管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=110)
    tkinter.Button(frame, text='批发结算管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发结算管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=140)
    tkinter.Button(frame, text='批发人员管理', font=('黑体', 10), bg=color, fg='black', command=lambda: print('批发人员管理'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=170)

    tkinter.Label(frame, text='数据中心', font=('黑体', 12), fg='black', bg=color).place(x=10, y=220)
    tkinter.Button(frame, text='销售数据查询', font=('黑体', 10), bg=color, fg='black', command=lambda: print('销售数据查询'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=260)
    tkinter.Button(frame, text='库存数据查询', font=('黑体', 10), bg=color, fg='black', command=lambda: print('库存数据查询'),
                   relief='flat', activebackground='grey', overrelief='raised').place(x=40, y=290)


def body_supermarket():
    print('超市店铺')
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=380, x=30, y=260)

    tkinter.Label(frame, bg='white').place(width=170, height=5, x=0, y=205)
    tkinter.Label(frame, bg='white').place(width=765, height=5, x=175, y=40)
    tkinter.Label(frame, bg='white').place(width=5, height=380, x=170, y=0)


def body_food():
    print('美食广场')
    frame = tkinter.Frame(root, bg=color)
    frame.place(width=940, height=380, x=30, y=260)

    tkinter.Label(frame, bg='white').place(width=170, height=5, x=0, y=205)
    tkinter.Label(frame, bg='white').place(width=765, height=5, x=175, y=40)
    tkinter.Label(frame, bg='white').place(width=5, height=380, x=170, y=0)


def login():
    print('登录用户')
    login_toplevel = tkinter.Toplevel(root)
    login_toplevel.title('用户登录')
    login_toplevel.geometry('250x200+835+400')
    login_toplevel.attributes('-topmost', 1)
    login_toplevel.resizable(False, False)
    login_toplevel.grab_set()
    login_toplevel.protocol('WM_DELETE_WINDOW', root.quit)

    tkinter.Label(login_toplevel, image=image).place(width=250, height=100, x=0, y=0)
    tkinter.Label(login_toplevel, text='用户', font=('黑体', 12)).place(width=50, height=25, x=20, y=105)
    tkinter.Label(login_toplevel, text='密码', font=('黑体', 12)).place(width=50, height=25, x=20, y=135)
    (user := tkinter.Entry(login_toplevel)).place(width=150, height=25, x=70, y=105)
    (password := tkinter.Entry(login_toplevel)).place(width=150, height=25, x=70, y=135)
    tkinter.Button(login_toplevel, text='登录', command=lambda: login_in()).place(width=100, height=30, x=20, y=165)
    tkinter.Button(login_toplevel, text='注册', command=lambda: register_in()).place(width=100, height=30, x=130, y=165)

    def login_in():
        print('登录')
        if not (user.get() and password.get()):
            tkinter.messagebox.showerror('登录信息', '用户名或密码不能为空!', parent=login_toplevel)
        elif user.get() + ',' + password.get() in read_data():
            tkinter.messagebox.showinfo('登录信息', '登录成功', parent=login_toplevel)
            login_toplevel.destroy()
            root.attributes('-disable', 0)
            root.attributes('-topmost', 1)
        else:
            tkinter.messagebox.showwarning('登录信息', '用户名或密码错误!', parent=login_toplevel)

    def register_in():
        print('注册')
        register_toplevel = tkinter.Toplevel(root)
        register_toplevel.title('注册信息')
        register_toplevel.geometry('250x130+835+400')
        register_toplevel.resizable(False, False)
        register_toplevel.attributes('-topmost', 1)
        login_toplevel.attributes('-disabled', 1)
        register_toplevel.protocol('WM_DELETE_WINDOW', login_toplevel.quit)

        tkinter.Label(register_toplevel, text='新用户', font=('黑体', 12)).place(width=50, height=25, x=20, y=5)
        tkinter.Label(register_toplevel, text='新密码', font=('黑体', 12)).place(width=50, height=25, x=20, y=35)
        tkinter.Label(register_toplevel, text='新密码', font=('黑体', 12)).place(width=50, height=25, x=20, y=65)
        (new_user := tkinter.Entry(register_toplevel)).place(width=150, height=25, x=75, y=5)
        (password1 := tkinter.Entry(register_toplevel)).place(width=150, height=25, x=75, y=35)
        (password2 := tkinter.Entry(register_toplevel)).place(width=150, height=25, x=75, y=65)
        tkinter.Button(register_toplevel, text='注册', command=lambda: register_new()).place(width=100, height=30, x=20, y=95)
        tkinter.Button(register_toplevel, text='取消', command=lambda: register_toplevel.quit()).place(width=100, height=30, x=130, y=95)

        def register_new():
            if not (new_user.get() and password1.get()):
                tkinter.messagebox.showerror('注册提示', '用户名或密码不能为空!', parent=register_toplevel)
            elif password1.get() != password2.get():
                tkinter.messagebox.showerror('注册提示', '两次密码不一致!', parent=register_toplevel)
            else:
                tkinter.messagebox.showinfo('注册提示', '注册成功!', parent=register_toplevel)
                with open('data.csv', 'a') as file:
                    file.write(f'{new_user.get()},{password1.get()}\n')
                register_toplevel.destroy()
                login_toplevel.attributes('-disable', 0)

    def read_data():
        with open('data.csv', 'r') as file:
            return map(str.strip, file.readlines())


def main():
    head()
    information()
    login()
    root.mainloop()


if __name__ == '__main__':
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/596723.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Osek网络管理测试】[TG3_TC6]等待总线睡眠状态_2

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT在满足进入等待睡眠状态的条件时是否进入该状态 …

Vue 基础语法

【1】模板语法 (1)差值表达式 {{}}是 Vue.js 中的文本插值表达式。 它用于在模板中输出数据或表达式的值。当数据或表达式的值发生变化时,插值表达式会自动更新。 补充:三目运算符 它的基本语法是 Condition ? A : B&#xff0…

解密SSL/TLS:密码套件扫描仪的深度解析(C/C++代码实现)

解密SSL/TLS流量通常是为了分析和审计加密通信,以确保数据传输的安全性和合规性。密码套件扫描仪是实现这一目的的一种工具,它可以提供关于SSL/TLS配置的详细信息,帮助安全专家评估潜在的风险。 SSL/TLS协议基础 SSL/TLS协议是网络安全中不…

Redis探索之旅(基础)

目录 今日良言:满怀憧憬,阔步向前 一、基础命令 1.1 通用命令 1.2 五大基本类型的命令 1.2.1 String 1.2.2 Hash 1.2.3 List 1.2.4 Set 1.2.5 Zset 二、过期策略以及单线程模型 2.1 过期策略 2.2 单线程模型 2.3 Redis 效率为什么这么高 三…

AI人才争夺战,华尔街入局:豪掷百万美元年薪抢人 | 最新快讯

量子位公众号 QbitAI 继硅谷之后,华尔街也入局“AI 人才争夺大战”。 他们的目标非常明确——抢的就是高精尖的 AI 专家。 △图源:Business Insider 现在这条“街”上,不论是银行、对冲基金还是私募股权公司都已纷纷下场,可谓是豪…

(读书笔记-大模型) LLM Powered Autonomous Agents

目录 智能体系统的概念 规划组件 记忆组件 工具组件 案例研究 智能体系统的概念 在大语言模型(LLM)赋能的自主智能体系统中,LLM 充当了智能体的大脑,其三个关键组件分别如下: 首先是规划,它又分为以下…

2024第六届人工智能与教育国际研讨会(WAIE 2024)即将召开!

2024第六届人工智能与教育国际研讨会(WAIE 2024)将于2024年9月28-30日在日本东京举行。WAIE 2024的召开,旨在汇聚全球智慧,共同探讨人工智能在教育领域的应用与发展,找到人工智能与教育融合发展的最佳路径,…

从零开始的软件测试学习之旅(五)web测试项目

这里写目录标题 功能型测试非功能性测试面试拓展项目与数据库关系 测试用例设计—基于TPshop前台下单流程 功能型测试 一.设计测试 a,需求分析 1.输入分析 分析项目中要求如:输入长度,类型要求,组成规则,是否为空,是否重复 2.交付分析 判断所有数据正确,有错误给出提示(优化…

i.MX 6ULL 裸机 IAR 环境安装

一. IAR 的安装请自行搜索 二. 使用最新版本的 IAR,需要修改 SDK 1. 在 SDK 的 core_ca7.h 加上 #include "intrinsics.h" /* IAR Intrinsics */ 2. debug 时需要修改每个工程下的 ddr_init.jlinkscript,参考链接 Solved: How to conn…

双重检验锁方式实现单例模式

单例模式(Singleton Pattern):是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象&#xff0c…

电源小白入门学习7——USB充电、供电、电源路径管理

电源小白入门学习7——USB充电、供电、电源路径管理 USB充电系统需要考虑的因素开关充电和线性充电充电路径管理输入限流路径管理(动态功率管理)理想二极管帮助提高电池利用率输入过充抑制 上期我们介绍了锂离子电池的电池特性,及充电电路设计…

OpenNJet评测,探寻云原生之美

在信息时代的大海上,云原生应用引擎如一艘航行于波涛之间的帆船,承载着创新的梦想和数字化的未来。本文将带领您登上这艘船,聚焦其中之一的OpenNJet,一同探寻其中的奥秘和精妙,领略其独特之美。 OpenNJet 内容浅析 O…

【JavaScript】数据类型转换

JavaScript 中的数据类型转换主要包括两种:隐式类型转换(Implicit Type Conversion)和显式类型转换(Explicit Type Conversion)。 1. 隐式类型转换(自动转换): js 是动态语言&…

代码随想录第51天 | 309.最佳买卖股票时机含冷冻期

309.最佳买卖股票时机含冷冻期 309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bi…

ncnn 算子操作描述

ncnn 算子操作描述,具体查询见 ncnn/docs/developer-guide/operators.md at master Tencent/ncnn GitHub 都是从上述地方copy过来的,做备份。 具体如下: 1.AbsVal: 计算输入张量中的每个元素的绝对值。 y abs(x)one_blob_only 只支持…

Go 语言(四)【常用包使用】

1、命令行参数包 flag flag 包就是一个用来解析命令行参数的工具。 1.1、os.Args import ("fmt""os" )func main() {if len(os.Args) > 0 {for index, arg : range os.Args {fmt.Printf("args[%d]%v\n", index, arg)}} } 运行结果&#…

【Docker】docker部署lnmp和搭建wordpress网站

环境准备 docker:192.168.67.30 虚拟机:4核4G systemctl stop firewalld systemctl disable firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add…

MTEB - Embedding 模型排行榜

文章目录 关于 MTEBMTEB 任务和数据集概览使用 MTEB Pythont 库Installation使用 关于 MTEB MTEB : Massive Text Embedding Benchmark github : https://github.com/embeddings-benchmark/mtebhuggingface : https://huggingface.co/spaces/mteb/leaderboardpaper : https:/…

全国31省对外开放程度、经济发展水平、ZF干预程度指标数据(2000-2022年)

01、数据介绍 自2000年至2022年,中国的对外开放程度不断深化、经济发展水平不断提高、ZF不断探索并调整自身在经济运行中的角色和定位,以更好地适应国内外环境的变化,也取得了举世瞩目的成就。这一期间,中国积极融入全球经济体系…

书籍推荐|经典书籍ic书籍REUSE METHODOLOGY MANUALFOR等和verilog网站推荐(附下载)

大家好,今天是51过后的第一个工作日,想必大家都还没有完全从节假日的吃喝玩乐模式转变为勤勤恳恳的打工人模式,当然也包括我,因此这次更新主要是分享几篇书籍和verilog相关的学习网站~ 首先是一本数字电路相关的基础书籍&#xf…