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

news2024/12/28 21:08:37

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

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

一、创建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()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨境电商日报:虾皮开设新物流中心;Tk Shop菲律宾调整佣金费率

2024年5月7日跨境电商日报目录: 1.Shopee开设新物流中心; 2.TikTok Shop菲律宾站调整佣金费率; 3.野莓海外仓卖家可以销售9公斤以上商品; 4.亚马逊一季度净销售额同比增长13%; 5.巴西对华二氧化钛启动反倾销调查 …

AIGC (AI-Generated Content) 技术深度探索:现状、挑战与未来愿景

🔥 个人主页:空白诗 文章目录 🤖 AIGC技术:塑造未来的创意与内容革命 🌟引言 🚀AIGC技术发展现状 📈核心技术驱动 💡应用领域拓展 🌐 面临的挑战 ❌真实性与伦理考量 &am…

王春城:精益变革对于组织的长期发展有什么好处?

众所周知,精益变革不仅仅是一种管理方法的改进,更是一种思维方式的转变,旨在消除浪费、提高效率和持续改进。那么,精益变革对于组织的长期发展究竟有什么好处呢?下面天行健王春城老师将从多个方面详细阐述。 首先&…

怎么制作地图位置二维码?扫码获取地图信息的方法

随着互联网的不断发展,二维码在工作和生活中的应用不断的增多,可以针对不同的用途展示内容。比如现在很多的商家或者店铺会将定位定制生成二维码,印刷到传单或者宣传海报上,就可以让用户通过扫码获取位置,方便精准定位…

MetaCRM upload 任意文件上传漏洞

文章目录 漏洞描述漏洞原理漏洞复现修复建议 漏洞描述 北京美特软件技术有限公司(以下简称“美特软件”)是一家专业的客户关系管理软件提供商。 美特软件MetaCrm存在文件上传漏洞,攻击者可利用该漏洞上传任意恶意文件。 漏洞原理 在系统u…

密室逃脱游戏-第12届蓝桥杯省赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第58讲。 密室逃脱游戏&…

详细介绍ARM-ORACLE Database 19c数据库下载

目录 1. 前言 2. 获取方式 2.1 ORACLE专栏 2.2 ORACLE下载站点 1. 前言 现有网络上已有非常多关于ORACLE数据库机下载的介绍,但对于ARM平台的介绍不多,借此机会我将该版的下载步骤做如下说明,希望能够一些不明之人提供帮助和参考 2. 获…

揭秘CDO首席数据官选用机制:企业如何找到最合适的数据领袖?

随着大数据时代的到来,数据已成为企业最宝贵的资源之一。为了有效管理和利用这些数据,越来越多的企业开始设立首席数据官(CDO)这一职位。首席数据官不仅负责企业数据的战略规划和治理,还要推动数据驱动的业务决策。那么…

性能测试常见风险以及消减措施

性能测试过程中会遇到各种各样的风险,常见风险以及消减措施有哪些? 一: 时间 一)时间相关风险 时间相关风险不仅限于最终用户满意度,尽管这是大多数人首先想到的。时间也是某些与业务和数据相关的风险因素。性能测试可以解决的…

【前端】前端数据本地化的多种实现方式及其优劣对比

前端数据本地化的多种实现方式及其优劣对比 在现代Web开发中,提高页面响应速度和改善用户体验是核心目标之一。数据本地化是其中一种实现方式,它通过在客户端存储数据来减少服务器请求,从而加快数据载入速度和改善用户的体验。本文将介绍前端…

【JS】call和 apply函数的详解

JavaScript 中 call() 和 apply() 函数的详解 在JavaScript中,call()和apply()都是非常重要的方法,用于调用函数时指定函数体内的this的值,从而实现不同对象之间的方法共享。尽管它们的功能非常相似,但在实际使用中各有其优势和特…

Jupyter Notebook输入python代码没智能提示

1、在Jupyter中打开控制台 2、再控制台中执行以下两个命令: pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter_contrib_nbextensions命令需要下载文件,请耐心等待。 3、执行完成后&#xff0…

【正点原子Linux连载】 第四十章 Linux网络驱动实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四十…

天工一刻 | 一文看懂MoE混合专家大模型 | 最新快讯

(原标题:天工一刻 | 一文看懂MoE混合专家大模型) 随着大模型技术迎来颠覆性突破,新兴AI应用大量涌现,不断重塑着人类、机器与智能的关系。 为此,昆仑万维集团重磅推出《天工一刻》系列产业观察栏目。在本…

Google搜索广告怎么开户?谷歌广告开户投放引流技巧、账户搭建、谷歌ads广告推广投放策略 #搜索引擎 #谷歌广告#互联网营销

Google搜索广告开户步骤: 选择代理商:首先,您需要选择一个经验丰富、信誉良好的Google广告代理商。可以选择上海上弦来广告开户和代运营。 初步咨询:与代理商进行初步沟通,了解他们的服务内容、成功案例、收费标准等。…

翻译《The Old New Thing》- Does Windows have a limit of 2000 threads per process?

Does Windows have a limit of 2000 threads per process? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050729-14/?p34773 Raymond Chen 2005年07月29日 Windows 是否有一个每个进程2000线程的限制? 简要 文章解释了在 W…

一键生成AI数字人短视频工具推荐!

数字人是什么?是利用人工智能技术实现与真人直播形象的1:1克隆,即克隆出一个数字化的你自己,包括你的形象、表情、动作和声音都会被克隆下来,让你能够拥有接近真人的表现力。 怎样使用数字人一天生成上百条短视频,无需…

Java中导入Maven项目

Maven坐标 maven坐标是资源的唯一标识,通过坐标可以唯一定位资源位置 使用坐标来定义项目或引入项目中需要的依赖 Maven坐标的组成 groupId:定义当前Maven项目隶属组织名称(通常是域名反写 例如:com.ming) artifa…

AI视频教程下载:用ChatGP在24小时内制作发布畅销电子书

这门变革性的课程使您能够利用内容生成和自行出版的新兴AI世界。利用ChatGPT 4等尖端人工智能工具,也称为ChatGPT Plus,您将获得所需的技能集,以创建引人入胜的内容,掌握设计,并成为亚马逊KDP上成功的自行出版作者 。 …

电商技术揭秘三十九:电商智能风控技术架构设计

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘二十八:安全与合规性保障 电商技术揭秘二十九:电商法律合规浅析 电商技术揭秘三十:知识产权保…