Как сделать неизменяемый текст по умолчанию для записи в Tkinter? - PullRequest
0 голосов
/ 30 июня 2019

Мне удалось найти в SO сообщение о том, как создать запись Tkinter со значением по умолчанию (ссылаясь на на этот ).Приведенный ниже код демонстрирует мое использование:

comCurrent_Label = tk.Entry(root, font = (16), bg = "black", fg = "white", bd = 3, relief = "sunken")
comCurrent_Label.insert(0, ">>> ")
comCurrent_Label.grid(row = 2, column = 0, ipady = 15, ipadx = 175)

Но я бы хотел, чтобы пользователь не мог удалить >>> путем слишком большого расстояния назад.

Мой вопрос: Как сделать текст этой записи неизменяемым / отменяемым?

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Вы можете использовать функцию проверки виджета ввода, чтобы предотвратить удаление пользователем начальных символов.Просто потребуйте, чтобы любое новое значение начиналось со строки «>>>», и эта запись не позволит пользователю удалить эти символы.

Вот пример:

import tkinter as tk

def validate(new_value):
    return new_value.startswith(">>> ")

root = tk.Tk()
vcmd = root.register(validate)
entry = tk.Entry(root, validate="key", validatecommand=(vcmd, "%P"))
entry.pack(side="top", fill="x", padx=20, pady=20)
entry.insert(0, ">>> ")

root.mainloop()

Для болееподробное описание проверки записи см. Интерактивная проверка содержимого виджета ввода в tkinter

1 голос
/ 30 июня 2019

Самое простое решение для этого - просто поместить >>> в другой виджет, такой как Label:

import tkinter as tk

root = tk.Tk()
subframe = tk.Frame(root, bd = 3, relief = "sunken")
lbl = tk.Label(subframe, text=">>> ", font = (16), bg = "black", fg = "white", bd=0, highlightthickness=0)
lbl.pack(side=tk.LEFT)
comCurrent_Label = tk.Entry(subframe, font = (16), bg = "black", fg = "white", bd=0, highlightthickness=0)
comCurrent_Label.pack(side=tk.LEFT)
subframe.grid(row = 2, column = 0, pady = 15, padx = 175)

root.mainloop()

Тебе, вероятно, следует обернуть это в аккуратный маленький подкласс.

...