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()