首页 > 解决方案 > 如何在 Tkinter 中设置 Entry 参数“显示”以始终在 Entry 字段中显示固定数量的星号?

问题描述

我将“显示”参数设置为“*”,这样“输入”字段就不会显示输入的内容。我遇到的问题是,它暗示了这个词的实际长度。因此,例如,如果我输入单词“blue”,它将显示为“****”,这暗示它是一个 4 个字符长的单词。此外,解决方案代码需要与填写上述字段的随机函数一起使用

我该如何解决这个简单的方法?

编辑:为了把事情放到一个上下文中,这是我制作的应用程序的代码。

import random
from tkinter import *

def num_guess():
    try:
        int(num_input.get())

    except ValueError:
        Ans = "You must enter a number in your number field!\n"
        result_field.insert(INSERT, Ans)

    if int(num_input.get()) == int(hidden_num):
        Ans = "Congrats you guessed correctly!\n"
        result_field.insert(INSERT, Ans)
        secret_num.delete(0, END)
        secret_num.insert(END, hidden_num) 

    elif int(num_input.get()) in range(int(hidden_num) - 2, int(hidden_num) + 3):
        Ans = "You are very close to secret number!..." + str(num_input.get()) + "\n"    
        result_field.insert(INSERT, Ans)

    elif int(num_input.get()) in range(int(hidden_num) - 5, int(hidden_num) + 6):
        Ans = "You are close to secret number!..." + str(num_input.get()) + "\n"    
        result_field.insert(INSERT, Ans)

    elif int(num_input.get()) in range(int(hidden_num) - 10, int(hidden_num) + 11):
        Ans = "You are relatively close to secret number!..." + str(num_input.get()) + "\n"    
        result_field.insert(INSERT, Ans)

    elif int(num_input.get()) in range(int(hidden_num) - 15, int(hidden_num) + 16):
        Ans = "You are far from secret number!..." + str(num_input.get()) + "\n"   
        result_field.insert(INSERT, Ans)

    else:
        Ans = "You are very far from secret number!..." + str(num_input.get()) + "\n"   
        result_field.insert(INSERT, Ans)

def start_new():
    global hidden_num
    result_field.delete('1.0', END)
    secret_num.delete(0, END)
    secret_num.insert(END, random.randint(1,100)) 
    hidden_num = secret_num.get()
    secret_num.delete(0, END)
    secret_num.insert(END, "***")
    result_field.insert(INSERT, "Now enter your number as a guess!\n") 

def hide_num():
    global hidden_num

    try:
        int(secret_num.get())
        hidden_num = secret_num.get()
        secret_num.delete(0, END)
        secret_num.insert(END, "***")
        result_field.insert(INSERT, "Now enter your number as a guess!\n") 

    except ValueError:
        Ans = "You must enter a number in secret number field!\n"
        result_field.insert(INSERT, Ans)    

hidden_num = 0

window = Tk()
window.title('Guess the Number!')
Label(window, text = "").grid(row=0)
Label(window, text = "Secret number:").grid(row=7, column=1, padx=8)
Label(window, text = "Enter your number:").grid(row=8, column=1, padx=8)
Label(window, text = "").grid(row=10)

#find textbox code!
result_field = Text(window, width=54, height=18)
result_field.grid(row=1, column=1, columnspan=6, rowspan=6, padx=8)
result_field.insert(INSERT, "Click 'Start new' to start a new game!\n") 

sb1 = Scrollbar(window)
sb1.grid(row=1, column=7, rowspan=6, sticky = 'NS')
result_field.configure(yscrollcommand=sb1.set)
sb1.configure(command = result_field.yview)

secret_num = Entry(window, width=6)
secret_num.grid(row=7, column=2)

num_input = Entry(window, width=6)
num_input.grid(row=8, column=2)                                                                         

b1 = Button(window, text = "Take a guess!", command=num_guess, width=12)
b1.grid(row=9, column=1, pady=8, padx=8)
b2 = Button(window, text = "Start new", command=start_new, width=12)
b2.grid(row=9, column=2, pady=8, padx=8)
b3 = Button(window, text = "Quit", command=window.destroy, width=12)
b3.grid(row=9, column=3, pady=8, padx=8) 
b4 = Button(window, text = "Hide number", command=hide_num, width=12)
b4.grid(row=7, column=3, sticky = 'W')

window.mainloop()

标签: pythontkinterpasswordstkinter-entry

解决方案


如何在 Tkinter 中设置 Entry 参数“显示”以始终在 Entry 字段中显示固定数量的星号?..我该如何解决这个简单的方法?

没有简单的方法,show除了将 show 设置为空白之外,没有其他方法可以使用该属性来隐藏长度。

如果您需要更安全的东西,则必须创建自己的绑定来接受用户的输入,然后显示其他内容。


推荐阅读