Как создать поле ввода пароля с помощью Tkinter

Я пытаюсь закодировать окно входа в систему с помощью Tkinter, но не могу скрыть текст пароля в формате звездочки. Это означает, что ввод пароля представляет собой обычный текст, чего следует избегать. Любая идея, как это сделать?


person Hick    schedule 10.03.2010    source источник


Ответы (4)


Быстрый поиск в гугле дал это

widget = Entry(parent, show="*", width=15)

где widget — текстовое поле, parent — родительский виджет (окно, фрейм и т. д.), show — символ для отображения (то есть символ, показанный в Entry), а width — ширина виджета.

person Federico klez Culloca    schedule 10.03.2010
comment
Это полезно, насколько это возможно. Хотя ОП не упомянул об этом, можете ли вы сказать, предотвращает ли show='*' также копирование/вставку? - person Adrian Keister; 08.04.2019
comment
Во всяком случае, я могу говорить об этом на Mac с использованием Python 3.7: копирование копирует только *, поэтому безопасность кажется достаточной для большинства целей. - person Adrian Keister; 08.04.2019
comment
Вы знаете, это было давно, поэтому я даже не уверен, что это было для Python 3, когда я писал этот ответ. Я предполагаю, что это зависит от того, как операционная система отображает поля пароля, если они у нее есть изначально. - person Federico klez Culloca; 09.04.2019
comment
Очень точный и понятный ответ! @ Хик, пожалуйста, отметь это как правильный ответ. - person Delicia Fernandes; 17.06.2021

Если вы не хотите создавать новый виджет Entry, вы можете сделать это:

myEntry.config(show="*");

Чтобы снова вернуться к нормальному состоянию, сделайте следующее:

myEntry.config(show="");

Я обнаружил это, изучив предыдущий ответ и используя функцию справки в интерпретаторе Python (например, help (tkinter.Entry) после импорта (из сканирования документации). Я признаю, что просто догадался, как снова сделать его нормальным .

person Brōtsyorfuzthrāx    schedule 25.04.2014

widget-name = Entry(parent,show="*")

Вы также можете использовать символ пули:

bullet = "\u2022" #specifies bullet character
widget-name = Entry(parent,show=bullet)#shows the character bullet
person Nathan Green    schedule 02.04.2015
comment
Это не сработало для меня; не уверен, что я делаю неправильно, или если это просто не работает - person Captain Fantastic; 13.12.2016
comment
Если вы используете Python 3.x, вы можете просто ввести символ маркера вместо кода Unicode. Однако убедитесь, что ваш файл имеет кодировку UTF-8. @CaptainFantastic В Linux иногда можно вводить символы Unicode, нажимая Ctrl+shift+m, а затем вводя код. Либо скопируйте из карты символов, либо используйте последовательность клавиш для составления. - person Brōtsyorfuzthrāx; 09.02.2019
comment
нельзя использовать тире (-) для именования переменных в python - person Asara; 05.07.2020

Вот небольшое, чрезвычайно простое демонстрационное приложение, скрывающее и извлекающее пароль с помощью Tkinter.

#Python 3.4 (For 2.7 change tkinter to Tkinter)
    
from tkinter import * 
        
def show():
    p = password.get() #get password from entry
    print(p)
        
    
app = Tk()   
password = StringVar() #Password variable
passEntry = Entry(app, textvariable=password, show='*')
submit = Button(app, text='Show Console',command=show)

passEntry.pack() 
submit.pack()      

app.mainloop() 

Надеюсь, это поможет!

person loxsat    schedule 17.09.2016
comment
и passEntry, и submit содержат None после вызова pack(), вам нужно сначала назначить переменные, а затем вызвать менеджер pack. - person R__raki__; 22.07.2019