Python Tkinter-选项数据库仅部分工作

Python Tkinter-选项数据库仅部分工作,python,tkinter,tkinter.style,Python,Tkinter,Tkinter.style,我正在制作一个带有黑色主题的GUI,希望通过使用选项数据库设置默认参数来节省时间,但只有一些选项可以工作。像“背景”和“字体”这样的选项可以正常工作,但像更改activebackground或为单选按钮选择Color这样的其他选项不起作用。更改条目小部件上的“insertbackground”也不起作用 我不知道为什么有些选择是有效的,而有些是无效的。如果我在创建小部件时传入相同的参数,它就会工作。例如: myRadio = Radiobutton(frame, selectcolor='#FF

我正在制作一个带有黑色主题的GUI,希望通过使用选项数据库设置默认参数来节省时间,但只有一些选项可以工作。像“背景”和“字体”这样的选项可以正常工作,但像更改activebackground或为单选按钮选择Color这样的其他选项不起作用。更改条目小部件上的“insertbackground”也不起作用

我不知道为什么有些选择是有效的,而有些是无效的。如果我在创建小部件时传入相同的参数,它就会工作。例如:

myRadio = Radiobutton(frame, selectcolor='#FF0000', **otherKwargs)
我试过两种方法

import tkinter
from tkinter import Tk, ttk, Frame, Entry, Label, Button, Toplevel, BooleanVar, IntVar, Radiobutton, StringVar, Canvas
mw  = Tk()

mw.option_readfile('StyleDatabase.txt')

# code here...

mw.mainloop()
“StyleDatabase.txt”文件包含以下内容:

*background: #000008
*foreground: grey90
*font: '', 11
*Entry*background: #404050
*Radiobutton*selectcolor: #FF0000  <---- This one doesn't work.

# also tried:
*selectcolor: #FF0000
*Radiobutton.selectcolor: #FF0000 <---- Neither worked
据我所知,没有其他方法可以做到这一点

编辑:这里有一个可行的脚本来演示这个问题,Python3.x

import tkinter
from tkinter import Tk, ttk, Frame, Entry, Label, Button, Toplevel, BooleanVar, IntVar, Radiobutton, StringVar, Canvas

class MainUI:
    def __init__(self, master):
        self.master = master 

        Label(self.master, text='Hello').pack(side='top')

        Entry(self.master).pack(side='top')
        Entry(self.master, insertbackground='red').pack(side='top')

        Button(self.master, text='Cyan Button').pack(side='top')

mw = Tk()

mw.option_add('*background', 'blue') # works
mw.option_add('*foreground', 'white') # works
mw.option_add('*Button.foreground', 'cyan') # works

mw.option_add('*insertbackground', 'red') # does not work. Works if i pass the argument in when creating the widget.
mw.option_add('*Entry.insertbackground', 'red') # also does not work
mw.option_add('*Entry*insertbackground', 'red') # also does not work

mainUI = MainUI(mw)

mw.mainloop()
问题:选项数据库仅部分工作

您必须使用
tkinter
和底层
Tcl
使用的不同选项名和别名


您的选项参数必须是,注意超级案例
颜色

*Radiobutton*selectColor: #FF0000
您可以从
.config
获取
.option\u readfile
.option\u add
使用的名称:

myRadio = tk.Radiobutton(frame, selectcolor='#FF0000', **otherKwargs)
myRadio.grid()

print('{}'.format(myRadio.config()['selectcolor']))

>>> ('selectcolor', 'selectColor', 'Background', '#ffffff', '#FF0000')
这个答案解释了五个值中的每个选项

选项数据库使用第二个名称(此处为
“selectColor”


注意:无法设置
.config()
中未显示的选项


用Python测试:3.5-“Tcl版本”:8.6“TkVersion”:8.6

您是只使用tkinter小部件,还是也使用ttk小部件?我确实导入了ttk,但还没有使用任何小部件。计划稍后使用组合框。您如何导入它?如果你创建了一个合适的。我导入tkinter,然后从tkinter导入Tk,ttk,等等。。。我会经常使用的。我在问题的底部添加了一个可复制的示例。
myRadio = tk.Radiobutton(frame, selectcolor='#FF0000', **otherKwargs)
myRadio.grid()

print('{}'.format(myRadio.config()['selectcolor']))

>>> ('selectcolor', 'selectColor', 'Background', '#ffffff', '#FF0000')