style lista desplegable python combobox python-3.x tkinter ttk

python - lista - treeview tkinter



Cómo controlar el resaltado de selección de combobox tkinter (2)

¿Podría ser que con un combobox de solo lectura el problema no es la selección, sino el indicador de enfoque relativamente fuerte?

Con este workarround, pierde la capacidad de controlar su programa con el teclado. Para hacerlo bien, tendría que cambiar el estilo del enfoque de resaltado.

from tkinter import * from ttk import * def defocus(event): event.widget.master.focus_set() root = Tk() comboBox = Combobox(root, state="readonly", values=("a", "b", "c")) comboBox.grid() comboBox.set("a") comboBox.bind("<FocusIn>", defocus) mainloop()

Escribí un pequeño convertidor de faradio para aprender la programación de GUI. Funciona muy bien, se ve bien. El único problema es que no puedo entender cómo controlar este extraño resaltado que aparece en mis selecciones de ttk.Combobox . Utilicé un ttk.Style() , pero solo cambié los colores del fondo de ttk.Combobox , entradas, etc. También traté de cambiar los temas de openbox/gtk .

Estoy hablando de lo que se ve en el texto "microfarads (uF)".

Estaría bien, si resaltara el cuadro completo; pero prefiero que se haya ido por completo.

¿Cómo puedo manipular la selección de ttk.Combobox ?

# what the farad? # thomas kirkpatrick (jtkiv) from tkinter import * from tkinter import ttk # ze la programma. def conversion(*args): # this is the numerical value inV = float(inValue.get()) # these two are the unit (farads, microfarads, etc.) values inU = inUnitsValue.current() outU = outUnitsValue.current() # "mltplr" is multiplied times inValue (inV) if inU == outU: mltplr = 1 else: mltplr = 10**((outU - inU)*3) outValue.set(inV*mltplr) # start of GUI code root = Tk() root.title("What the Farad?") # frame mainFrame = ttk.Frame(root, width="364", padding="4 4 8 8") mainFrame.grid(column=0, row=0) # input entry inValue = StringVar() inValueEntry = ttk.Entry(mainFrame, width="20", justify="right", textvariable=inValue) inValueEntry.grid(column=1, row=1, sticky="W") # input unit combobox inUnitsValue = ttk.Combobox(mainFrame) inUnitsValue[''values''] = (''kilofarads (kF)'', ''farads (F)'', ''millifarads (mF)'', ''microfarads (uF)'', ''nanofarads (nF)'', ''picofarads (pF)'') inUnitsValue.grid(column=2, row=1, sticky="e") inUnitsValue.state([''readonly'']) inUnitsValue.bind(''<<ComboboxSelected>>'', conversion) # result label outValue = StringVar() resultLabel = ttk.Label(mainFrame, textvariable=outValue) resultLabel.grid(column=1, row=2, sticky="e") # output unit combobox outUnitsValue = ttk.Combobox(mainFrame) outUnitsValue[''values''] = (''kilofarads (kF)'', ''farads (F)'', ''millifarads (mF)'', ''microfarads (uF)'', ''nanofarads (nF)'', ''picofarads (pF)'') outUnitsValue.grid(column=2, row=2, sticky="e") outUnitsValue.state([''readonly'']) outUnitsValue.bind(''<<ComboboxSelected>>'', conversion) # padding for widgets for child in mainFrame.winfo_children(): child.grid_configure(padx=4, pady=4) # focus inValueEntry.focus() # bind keys to convert (auto-update, no button) root.bind(''<KeyRelease>'', conversion) root.mainloop()


Puede usar el método selection_clear() Combobox para borrar la selección cuando lo desee. p.ej

inUnitsValue.selection_clear()