如何在Tkinter文本小部件中显示星号(密码输入)

时间:2018-07-23 19:32:38

标签: python tkinter

使用常规的Tkinter Entry小部件,您可以使用:     show =“ *” 输入小部件具有诸如调整高度等限制,这就是为什么我选择使用文本小部件。

1 个答案:

答案 0 :(得分:0)

如果Entry小部件的实际问题是外观的高度限制,那么有一个非常简单的解决方案。只需将其包装到框架中即可:

root=Tk()
entryframe=Frame(root,height=<your height>,width=<your width>)
entryframe.pack_propagate(False)
entryframe.pack() #Use whatever geometry manager you need. I used pack here just for showcasing.
entry=Entry(entryframe,show='*')
entry.pack(fill=BOTH,expand=True)

如果您真的想使用“文本”小部件,那么您可能会对某些内容感兴趣。我在此之前写过这篇文章,不能保证它会百分百完美。它是用Python 3.6和tkinter 8.6编写的。

class hiddenText(Text):
    'Text widget which can display text in various forms.'
    def __init__(self,master=None,cnf={},**kw):
        'Construct a text widget with the parent MASTER.\n\n        STANDARD OPTIONS\n\n            background, borderwidth, cursor,\n            exportselection, font, foreground,\n            highlightbackground, highlightcolor,\n            highlightthickness, insertbackground,\n            insertborderwidth, insertofftime,\n            insertontime, insertwidth, padx, pady,\n            relief, selectbackground,\n            selectborderwidth, selectforeground,\n            setgrid, takefocus,\n            xscrollcommand, yscrollcommand,\n\n        WIDGET-SPECIFIC OPTIONS\n\n            autoseparators, height, maxundo,\n            spacing1, spacing2, spacing3,\n            state, tabs, undo, width, wrap,\n\n        '
        Text.__init__(self,master,cnf,**kw)
        self.master.bind('<Key>',self._keyhandler,'+')
        self._text=''
    def _keyhandler(self,event): #\x7f \x08
        'Intern function'
        if event.char=='\x08':
            self._text=self._text[:-1]
            self.delete(0.0,END)
            text=''
            for i in self._text.split('\r'): text+='*'*len(i)+'\n'
            self.insert(0.0,text[:-1])
        elif event.char=='\x7f':
            self._text=''
            self.delete(0.0,END)
        else:
            self._text+=event.char
            self.delete(0.0,END)
            text=''
            for i in self._text.split('\r'): text+='*'*len(i)+'\n'
            self.insert(0.0,text[:-1])
    def get(self):
        'Return the original typed text.'
        return self._text