Как изменить цвет курсора вставки ttk.Entry?

Я разрабатываю приложение с использованием Python3 и tkinter 8.6. Частью является довольно сложный диалог, который использует темный фон. Прилагаемый код использует только несколько виджетов, чтобы показать область, которую я не могу заставить работать. Среди прочего, мой диалог делает очевидным (выделенным цветом фона, просто вкладкой) виджет, который имеет фокус клавиатуры. Я пробовал каждую возможную строку поиска, которую мог найти для решения, но безрезультатно. Оказывается, «insertwidth»: «4» работает. Я хочу изменить цвет курсора точки вставки виджета ttkEntry. Ни один из предложенных ответов, которые я нашел, не является решением. Заранее спасибо.

    #!/usr/bin/env python3
import tkinter as tk
import tkinter.ttk as ttk    # ttk widgets use styles
import tkinter.font as tkfont

def app_exit():
    root.destroy()


root = tk.Tk()
root.geometry('400x50+400+100')
bg = '#2C2B3B'    # dark blue
hlbg = '#3F3D5C'  # dark blue a shade lighter
fg = 'white'
ebg = 'pink'   # Entry inserts
root.configure(background=bg)  # fills in around labels and entries
font14 = tkfont.Font(size=14)
font10 = tkfont.Font(size=10)
root.option_add('*TEntry*Font', font14)
ttstyle = ttk.Style()
ttstyle.theme_use('default')
ttstyle.theme_settings('default', {
    '.': {   # this sets the general defaults for everybody
        'configure': {'font': font14, 'background': bg, 'foreground': fg}},
    'TButton': {
        'map': {'background': [('active', hlbg), ('focus', hlbg), ('!disabled', bg)]}},
    'TEntry': {  # 'insertforeground' and 'insertforeground' does not seem to do anything
        'configure': {'insertwidth': '4', 'insertforeground': ebg, 'insertforeground': ebg},
        'map': {'fieldbackground': [('active', hlbg), ('focus', hlbg), ('!disabled', bg)],
                'foreground': [('!disabled', fg)]}},
    'TLabel': {
        'configure': {'font': font10}}})

lbl1 = ttk.Label(root, text='Hello ')
tbx = ttk.Entry(root)
btnOK = ttk.Button(root, text='Exit', command=app_exit)

lbl1.grid(row=0, column=0, sticky='w')
tbx.grid(row=0, column=1, sticky='ew')
btnOK.grid(row=0, column=2, sticky='e')
tbx.insert(0,'AbCdEf')
tbx.focus()

root.mainloop()

Пример вывода


person MelS    schedule 11.08.2020    source источник
comment
Все, что вам нужно, это изменить цвет курсора ввода, верно? сделать строку как tbx = ttk.Entry(root,insertbackground='red')   -  person Cool Cloud    schedule 11.08.2020
comment
Это одна из многих вещей, которые я пробовал, но они не работают (по крайней мере, в моей системе Ubuntu). Один из этих insertforeground должен был быть фоном. (Я добавил это в качестве примера того, что я пробовал позже и сделал ошибку редактирования. Ваше предложение выдает ошибку в моей системе: Файл /usr/lib/python3.8/tkinter/__init__.py, строка 2567, в init self.tk.call( _tkinter.TclError: неизвестный параметр -insertbackground   -  person MelS    schedule 11.08.2020
comment
@CoolCloud: запись ttk не имеет этой опции.   -  person Bryan Oakley    schedule 11.08.2020
comment
хорошо, подожди, не замечай этого, скажи tk.Entry() вместо ttk.Entry(...)   -  person Cool Cloud    schedule 11.08.2020


Ответы (1)


Вариант для виджета ttk Entry — insertcolor.

...
'TEntry': {
    'configure': {..., 'insertcolor': ebg},
...

Вот удобный справочник всех опций для виджетов ttk. Это в вики tcler, поэтому синтаксис tcl, а не python, но сами имена опций одинаковы для разных языков.

Изменение цветов виджета

person Bryan Oakley    schedule 12.08.2020
comment
Брайан, большое спасибо, это работает, вы никогда не поверите, сколько времени я потратил на это. И спасибо за ответ на мой следующий вопрос со ссылкой. Ты человек! - person MelS; 12.08.2020
comment
Я проголосовал за вас за ссылку. Я использую что-то другое, но то, что вы выложили, намного лучше. - person Michael Guidry; 13.08.2020