2013-04-19 2 views
2

재미있는 기본 이메일 클라이언트를 만들려고합니다. 암호 상자에 임의의 문자가 표시되면 재미있을 것이라고 생각했습니다. 이미 임의의 문자를 생성하는 기능이 있습니다문자가 입력 될 때마다 Tkinter 입력 상자를 반복하는 방법은 무엇입니까?

import string 
import random 



def random_char(): 

    ascii = string.ascii_letters 
    total = len(string.ascii_letters) 
    char_select = random.randrange(total) 

    char_choice = char_set[char_select] 

    return char_choice 

을하지만 문제는이 한 번만 실행되는 것입니다, 다음 프로그램은 무기한으로 해당 문자를 반복합니다.

self.Password = Entry (self, show = lambda: random_char()) 
    self.Password.grid(row = 1, column = 1) 

어떻게 엔트리 위젯 기능에게 문자가 입력 될 때마다 다시 실행 얻을 것인가?

답변

1

불행하게도, Entry 위젯의 show 속성은 그런 식으로 작동하지 않습니다 당신이 나타났습니다, 그것은 단순히 대신 입력 된 것을 문자로 표시하는 단일 문자를 지정합니다.

원하는 효과를 얻으려면 Entry 위젯의 키 누르기를 가로 채서 변환해야합니다. 하지만 실제로 원하는 키만 변경하고 다른 키는 남겨 두어야합니다 (특히 Return 키, Delete 키, 화살표 키 등). 이 (번호는 수정되지 않은 통과 의미) 아스키 문자의 경우 임의 함수를 호출하도록 정의 callback()

self.Password.bind("<Key>", callback) 

이의를 삽입 : 우리는 항목 상자에 모든 키를 눌러 이벤트에 콜백을 결합하여이 작업을 수행 할 수 있습니다 임의의 문자를 입력 한 다음 특수 break 문자열 상수를 반환하면이 이벤트의 처리가 더 이상 발생하지 않음을 나타냅니다.

def callback(event): 
    if event.char in string.ascii_letters: 
     event.widget.insert(END, random_char()) 
     return "break" 
관련 문제