So Steuern Sie die tkinter combobox-Auswahl hervorheben
Schrieb ich eine kleine farad Konverter zu lernen, GUI-Programmierung. Es funktioniert Super, sieht gut aus-ish. Das problem ist nur, ich kann nicht scheinen, um herauszufinden, wie die Kontrolle dieser seltsamen Hervorhebung, das kommt auf meine ttk.Combobox
Auswahl. Ich habe eine ttk.Style()
, aber es ist nur verändert die Farben des ttk.Combobox
hintergrund, Einträge, etc. Ich habe auch versucht, die änderung openbox/gtk
Themen.
Ich spreche über das, was sieht man dort auf den text "microfarads (uF)".
Es in Ordnung sein würde, wenn es hob die ganze Kiste; aber ich hätte es lieber vollständig verschwunden sind.
Wie kann ich manipulieren, eine ttk.Combobox
's Auswahl markieren?
# 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()
InformationsquelleAutor jtkiv | 2011-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie das Kombinationsfeld
selection_clear()
Methode, um die Auswahl zu löschen, Wann immer Sie wollen.e.g
wenn ich sage "klar" in diesem Zusammenhang meine ich, dass es entfernt die Auswahl hervorheben. Der Wert bleibt der gleiche.
ah. funktioniert Super! eh klar, alle Auswahl? (Programm ist nun größer)
InformationsquelleAutor Bryan Oakley
Könnte es sein, dass mit einem readonly-combobox das problem ist nicht die Auswahl, sondern die relativ starke Fokus-Indikator?
Mit diesem workarround verlieren Sie die Fähigkeit zur Steuerung Ihres Programms über die Tastatur. Um es richtig zu machen müsste man ändert den Stil des Fokus-Hervorhebung.
InformationsquelleAutor Gonzo