Floradance 2022-02-02 10:27 采纳率: 100%
浏览 68
已结题

请问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
  • 写回答

2条回答 默认 最新

  • A Python 萌新花花 2022-02-02 18:48
    关注

    首先,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()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 2月2日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么