Oops, I hit "reply" instead of "reply-list" last time.  Trying again...


On 06/03/2018 02:01 PM, Christian Gollwitzer wrote:
Am 03.06.18 um 21:54 schrieb Jim Lee:> import tkinter as tk
from tkinter import ttk

root = tk.Tk()
cb = ttk.Combobox(root)
cb.grid(row=0, column=0, sticky='NSEW')
cb['values'] = ['one', 'two', 'three', 'four']
root.mainloop()

The text of the values in the combobox dropdown list is white on white.   The *selected* item in the list is white on light grey, but all the unselected items are invisible (white on white).

Which platform are you on, i.e. which operating system? I guess it is Linux. In that case the default colors are read by Tk from the X11 options database, which is some cruft from the past to set options for X11 applications. Try to run

    xrdb -query

That should give you a list of default values, and maybe you can see something. The dropdown list is actually a popdown menu, so look for Menu colors. For instance, if you use a dark theme in your desktop environment, it could be that the foreground is correctly set to white, but the background is hardcoded white for some reason e.g.


    Christian

Thanks.  Yes, I am on Linux (Fedora 28, MATE desktop).  Yes, I am using a dark theme - however, xrdb does not show #ffffff for *any* background color, so I have no idea where ttk is picking it up from.  Even if I change to a light desktop theme, the ttk widget still displays white on white.  The only solution I have found so far is rather hackish, but it works:

class MyCombobox(ttk.Combobox):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.bind('<Map>', self._change_popdown_color)

    def _change_popdown_color(self, *args):
        popdown = self.tk.eval('ttk::combobox::PopdownWindow {}'.format(self))         self.tk.call('{}.f.l'.format(popdown), 'configure', '-foreground', 'black')

However, I am still looking for a more elegant solution that preferably doesn't hardcode colors...

-Jim

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to