有没有其他方法可以从组合框更改列表框属性?

时间:2021-04-08 13:56:10

标签: python tkinter

我一直在寻找更好的解决方案。屁股我找不到任何关于此的信息。我的问题是,如果组合框没有 root.option_add("*TCombobox*Listbox*Background", "#1d2128"),我可以更改列表框吗?所以它正在工作,但我希望在我创建的组合框附近进行更改,而不是在 root:

from tkinter import *
from tkinter import ttk

root = Tk()
root.geometry("400x200")

# listbox in combobox attributtes
root.option_add("*TCombobox*Listbox*Background", "#1d2128")
root.option_add("*TCombobox*Listbox*Foreground", "#8b9ebf")
root.option_add("*TCombobox*Listbox*Font", "Courier")


# create a combobox
style = ttk.Style()
style.theme_use("default")
style.map('TCombobox', fieldbackground=[('readonly', "#1d2128")])
style.map('TCombobox', foreground=[('readonly', "#8b9ebf")])
style.map('TCombobox', selectbackground=[('readonly', "#1d2128")])
style.map('TCombobox', background=[('readonly', "#8b9ebf")])
comboBox_Options = ["Option 1", "Option 2", "Option 3", "Option 4"]
comboBox = ttk.Combobox(root, values=comboBox_Options, style="TCombobox", font="Consolas")
comboBox.set("Option 1")
comboBox["state"] = "readonly"
comboBox.pack()

mainloop()

1 个答案:

答案 0 :(得分:1)

您可以使用以下函数来配置组合框的下拉列表框:

def config_combobox_popdown(cb, **kw):
    # popdown listbox
    popdown = cb.tk.eval("ttk::combobox::PopdownWindow %s" % cb)
    args = []
    for key, val in kw.items():
        args.append("-"+key)
        args.append(val)
    cb.tk.call("%s.f.l" % popdown, "configure", *args)

...

comboBox_Options = ["Option 1", "Option 2", "Option 3", "Option 4"]
comboBox = ttk.Combobox(root, values=comboBox_Options, style="TCombobox", font="Consolas")
comboBox.set("Option 1")
comboBox["state"] = "readonly"
comboBox.pack()

config_combobox_popdown(comboBox, font="Courier", foreground="#8b9ebf", background="#1d2128")
相关问题