代码之家  ›  专栏  ›  技术社区  ›  Steven Tautonico

有人能回答为什么这个Tkinter不起作用吗?

  •  -2
  • Steven Tautonico  · 技术社区  · 7 年前

    我很困惑

    请记住,我是编程/python的初学者,因此,如果我的代码没有组织或措辞糟糕,请忽略它,我会变得更好,哈哈

    我只是在玩tkinter,我试图获得一个登录屏幕,其中有一个复选框,用于切换密码的可见性。我只是不明白了。“show”参数不会根据分配给它的变量而改变,我也不知道为什么。

    showPassword = IntVar()
    show = None
    
    def apply():
        print(showPassword.get())
        sspass = showPassword.get()
        print(type(sspass))
        if sspass == 1:
            show = None
        elif sspass == 0:
            show = "*"
    
    
    spB = Checkbutton(root, text="Toggle Show Password", variable=showPassword).grid(row=10, column=1)
    
    applyButton = Button(root, text="Apply", command=apply).grid(column=1, row=5)
    
    Password = entry(root, show=show) 
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   progmatico    7 年前

    我已经安排了一段代码(这对您来说并不完美,但是…)基于你的,至少对你的进步有用。我想你的代码不完整,也有一些错误。您必须在小部件中配置show参数。更改show var不会对小部件产生任何影响。 你必须使用表格 widget['show'] = somevalue 。或者 .configure 小部件方法。对于这两者,您都需要一个小部件参考。如果在创建小部件的同一行中对其进行网格化, grid 不会归还任何东西,所以你把它弄松了。将其分为两步,并在创建时保留小部件的引用(第一步)。 entry 实际上被称为 Entry 。这些都是我看到的最可能的错误。

    from tkinter import Button, Checkbutton, Entry, Tk, IntVar
    
    root = Tk()
    
    showPassword = IntVar()
    show = None
    
    def apply():
        print(showPassword.get())
        sspass = showPassword.get()
        print(type(sspass))
        if sspass == 1:
            Password['show'] = "" 
        elif sspass == 0:
            Password['show'] = "*"
        Password.update()
    
    
    spB = Checkbutton(root, text="Show Password", variable=showPassword).grid(row=10, column=1)
    
    applyButton = Button(root, text="Apply", command=apply).grid(column=1, row=5)
    
    Password = Entry(root, show=show)
    Password.grid(row=3, column=1)
    
    root.mainloop()