Tkinter: Можно ли встроить поля ввода в текстовый абзац, чтобы выполнить задачу закрытия?

1

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

Эскиз желаемого результата:

Изображение 174551

Попытка кода:

import tkinter as tk

root = tk.Tk()
tk.Label(root, font=("Comic Sans MS",24,"bold"),\
         text="The largest bone in the human body is the").grid(row=0,column=0)
ent1 = tk.Entry(root)
ent1.grid(row=0,column=1)
tk.Label(root, font=("Comic Sans MS",24,"bold"),\
         text="which is found in the").grid(row=0,column=2)
ent2 = tk.Entry(root)
ent2.grid(row=0,column=3)
tk.mainloop()

Спасибо за чтение, и любая помощь очень ценится.

Теги:
tkinter

2 ответа

3
Лучший ответ

Вы можете добавлять виджеты в текстовый виджет с window_create метода window_create.

Вот краткий пример, чтобы показать, как вы можете использовать его для встраивания виджетов в блок текста. Код вставляет строку, содержащую {} везде, где вы хотите видеть виджет ввода. Затем код ищет этот шаблон в виджетах, удаляет его и вставляет виджет ввода.

import Tkinter as tk

quiz = (
    "The largest bone in the human body is the {} "
    "which is found in the {}. It is mainly made "
    "of the element {}, and is just below the {}."
)

root = tk.Tk()

text = tk.Text(root, wrap="word")
text.pack(fill="both", expand=True)

text.insert("end", quiz)

entries = []
while True:
    index = text.search('{}', "1.0")
    if not index:
        break
    text.delete(index, "%s+2c"%index)
    entry = tk.Entry(text, width=10)
    entries.append(entry)
    text.window_create(index, window=entry)

root.mainloop()
  • 0
    Большое спасибо, это выше и вне того, что мне нужно сделать, это будет иметь большое значение для нашей школы. Хорошего дня!
1

Вы можете вставлять записи в текстовый виджет, пример ниже.

import tkinter as tk

root = tk.Tk()

text = tk.Text(root)
text.pack()

text.insert('end', 'The largest ')

question = tk.Entry(text, width=10)
text.window_create('end', window=question)

text.insert('end', ' in the human body is...')

root.mainloop()
  • 0
    Это ложь: «Текстовый виджет не может содержать записи» . Вы можете встроить виджеты ввода в текстовый виджет.
  • 0
    Мой плохой, так оно и есть. Я не нашел это в первый раз. Я обновил свой ответ. Спасибо, Брайан.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню