Я пытаюсь сделать тест для некоторых из моих учеников, где им нужно ввести отсутствующие слова из абзаца (см. Рисунок). Ключевая проблема, с которой я сталкиваюсь, заключается в том, чтобы вставлять поля ввода в текстовый абзац, так что когда есть пробел, tkinter может создать окно ввода для ввода студентом.
Эскиз желаемого результата:
Попытка кода:
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()
Спасибо за чтение, и любая помощь очень ценится.
Вы можете добавлять виджеты в текстовый виджет с 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()
Вы можете вставлять записи в текстовый виджет, пример ниже.
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()