Установите скрытое строковое значение в поле ввода в tkinter python - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь сделать свой собственный поворот на Палач. Основная c часть Hangman состоит в том, что пользователь угадывает букву, и если она там есть, она появляется в поле ввода, иначе она добавляется в список неверных догадок.

Что я хочу сделать сейчас присваивает букву каждому полю ввода только для чтения на основе сгенерированного случайного слова. Однако я также не хочу, чтобы пользователь знал, какая буква ему назначена (очевидно).

def press(num):
    string1 = " "
    string1+=str(num)
    appears.set(string1)

appears = StringVar()
entrybox = Entry(hangman,state= 'readonly',textvariable = appears)
entrybox.place(x = 0, y = 0)

q = Button(hangman, text = 'Q', width = 4, command = lambda : press('Q'))
q.place(x = 200, y = 440)

Это то, что мне удалось сделать до сих пор

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете использовать словарь для хранения сопоставления букв с StringVars. Затем найдите предполагаемую букву и замените текст из заполнителя на букву.

word = "tiger" # just an example

let2svar = {}

for let in word:
  svar = StringVar()
  svar.set("_")
  entrybox = Entry(hangman, state='readonly', textvariable=svar)
  entrybox.place(x=0, y=0)
  if let not in let2svar:
    let2svar[let] = []

  let2svar[let].append(svar)


# Now when user guesses letter 'guess', check if it is in the word.

if guess in let2svar:
  for svar in let2svar[guess]:
    svar.set(guess)

Вы также можете проверить https://docs.python.org/3/library/collections.html#collections .defaultdict , чтобы получить более чистый способ обработки словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...