Есть ли опция конфигурации для нередактируемых префиксов в поле ввода - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь создать свою собственную консоль, используя Tkinter, и я хочу иметь возможность отображать префикс в поле ввода, а также использовать console.prefix ("prefix_goes_here") для установки указанного префикса. Но когда я использую entry.set ("prefix_goes_here"), у пользователя есть возможность удалить префикс.

пример того, что я имею в виду, можно найти в CMD

C:\Users\Nathan>command_goes_here

все до «>» - это то, что я бы назвал префиксом (но я не знаю, имеет ли оно официальное имя, поэтому я просто уточняю).

Я также хотел бы по-прежнему иметь возможность получить этот префикс, используя entry.get (), но я мог бы сохранить префикс в переменной и просто добавить его позже.

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Хотя я не нашел именно то, что вы просите, я бы предложил использовать 2 виджета ввода один рядом с другим без границ.

import tkinter as tk
root = tk.Tk()
e = tk.Entry(root)
e.configure(state="normal",borderwidth=0,highlightthickness=0)
e.insert(tk.END, "C:\\Users\\Nathan>")
e.configure(bg='white')
e.place(x=0,y=0)
e2 = tk.Entry(root)
e2.configure(bg='white',borderwidth=0,highlightthickness=0)
e2.place(x=97,y=0)
e2.config(state="normal")
root.mainloop()

enter image description here

1 голос
/ 28 марта 2020

Вариант конфигурации отсутствует.

Один из способов - использовать функцию проверки виджета Entry. В функции проверки вы можете проверить, что запись содержит префикс, и отклонить редактирование, если это не так.

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

Пример

import tkinter as tk

class Example():
    def __init__(self):
        root = tk.Tk()

        self.prefix = r'C:\Users\Nathan> '
        vcmd = (root.register(self.onValidate), '%P')
        self.entry = tk.Entry(root, validate="key", validatecommand=vcmd)
        self.entry.pack(padx=20, pady=20)
        self.entry.insert(0, self.prefix)

    def onValidate(self, P):
        return P.startswith(self.prefix)

e = Example()
tk.mainloop()
...