请问tkinter的entry的textvarible变量封装进函数之后失效问题!

这是我的代码,当本来想实现通过stringvar()创建变量然后绑定到entry的textvarible中实现entry中初始化的默认显示文字,但是现在当我把这个frame封进函数中并最终只返回挂载的最低层的frame时,并不能显示这些文字出来,但是不用函数封装直接在外层执行是可以的,下面就是对比效果,看起来封装进去之后变量的set并没有生效并且传递到值里面,有没有人知道怎么回事?

不封装:

img

封装进函数后:

img

def date_sign_frame(self):
    #为什么封装在函数中调用则textvarible无效?,因为没有使用变量再赋值-sd=sd.set()
    sd = ttk.StringVar()
    ed = ttk.StringVar()
    sd.set(time.strftime("%Y-%m-%d"))
    ed.set(time.strftime("%Y-%m-%d"))
    datediff = ttk.IntVar()
    datediff=datediff.set(2)
    username=ttk.StringVar()
    password=ttk.StringVar()
    username.set("123123")
    password.set("456")
    print(sd.get())

    init_frame = ttk.Frame(self.mywindow, style="secondary",)

    start_date = ttk.Entry(init_frame, style="light", textvariable=str(sd), width=12,)
    end_date = ttk.Entry(init_frame, style="light", textvariable=str(ed), width=12)
    dated = ttk.Entry(init_frame, style="light", textvariable=datediff, width=4)
    l_sd = ttk.Label(init_frame, text="起始日期: ", style="secondary", foreground="#ADB5BD", background="#444444")
    l_ed = ttk.Label(init_frame, text="结束日期: ", style="secondary", foreground="#ADB5BD", background="#444444")

    l_sd.grid(row=1,column=1,padx=(30,5),pady=(0))
    start_date.grid(row=1,column=3,columnspan=5)
    l_ed.grid(row=2,column=1,padx=(30,5),pady=(0))
    end_date.grid(row=2,column=3,columnspan=5)


    _username=ttk.Entry(init_frame,style="light", textvariable=str(username), width=20)
    _password=ttk.Entry(init_frame,style="light", textvariable=str(password),show="*", width=20)
    l_un= ttk.Label(init_frame, text="账户名: ", style="secondary", foreground="#ADB5BD", background="#444444")
    l_pw= ttk.Label(init_frame, text="密  码: ", style="secondary", foreground="#ADB5BD", background="#444444")
    l_un.grid(row=1,column=20,padx=(45,5),pady=(15,5))
    _username.grid(row=1,column=24,columnspan=5)
    l_pw.grid(row=2,column=20,padx=(45,5),pady=(5,15))
    _password.grid(row=2,column=24,columnspan=5)

    signin_butt=ttk.Button(init_frame,text="登 录", bootstyle="success",width=12,command=lambda : self.func._login())
    signin_butt.grid(row=1,rowspan=2,column=32,columnspan=3,padx=(30,5))

    return init_frame,sd,ed,username,password

首先,setvariable本来就是一个string形式的,所以你不用额外的str()一下,然后dated函数你根本没有显示出来。
既然封装了不好用,那你为什么要封装啊?既然都是要显示的,直接显示不就好了?一般封装一个东西是用来初始化或者是将大段常用代码封装起来方便调用。但是你这个就不必了。
而且,如果你就是真的想这么做,那么方法如下:
使用代码为 Entry 组件添加文本,可以使用 insert() 方法。如果要替换当前文本,可以先使用 delete() 方法,再使用 insert() 方法实现

import tkinter as tk
 
master = tk.Tk()
 
e = tk.Entry(master)
e.pack(padx=20, pady=20)
 
e.delete(0, "end")
e.insert(0, "默认文本...")
 
master.mainloop()

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632