Python Tkinter自定义主题

Python Tkinter自定义主题,python,tkinter,themes,Python,Tkinter,Themes,说明 我想使用Tkinter/ttk和python制作一个GUI,原因是我想学习GUI的样式 我试图找到有关如何设置“输入框”样式的信息,不是背景,而是实际的“插入框”,但我找不到有关如何设置样式的任何信息,而且内置主题隐藏得很好,因为我也找不到这些 图像演示: 默认样式 我多么想要它 我的问题 这可能吗?如果可能,怎么可能 有没有办法访问默认主题以便从中学习 是的,您可以设置默认主题,并为小部件分配这些主题。您需要的是样式选项 我从这里学到了我需要知道的关于风格的几乎所有东西:

说明

我想使用Tkinter/ttk和python制作一个GUI,原因是我想学习GUI的样式

我试图找到有关如何设置“输入框”样式的信息,不是背景,而是实际的“插入框”,但我找不到有关如何设置样式的任何信息,而且内置主题隐藏得很好,因为我也找不到这些

图像演示:

  • 默认样式

  • 我多么想要它


我的问题

  • 这可能吗?如果可能,怎么可能
  • 有没有办法访问默认主题以便从中学习

是的,您可以设置默认主题,并为小部件分配这些主题。您需要的是
样式
选项

我从这里学到了我需要知道的关于风格的几乎所有东西:

下面是一个小例子,它应该能给你一个基本的想法

import tkinter
from tkinter import ttk

root = tkinter.Tk()
ttk.Style().configure("Blue.TEntry", background="blue")

blue_ent= ttk.Entry(text="Test", style="Blue.TEntry").pack()

root.mainloop()
这很好地说明了如何使用
ttk.Style()

应用于ttk.Entry的标准样式并不采用fieldbackground选项,这将改变文本输入字段的颜色。解决方案是创建一个响应选项的新元素


Tkinter在这方面非常糟糕,即使是ttk。当我尝试做类似的事情时,我没有想出一个方法来做你要求的事情。这就是我最近将项目切换到Kivy的原因之一。啊,好吧,我已经研究了Kivy,但如果我能找到一种方法来实现tkinter的目标,我会更喜欢它,因为我想使用尽可能多的标准库。没错,虽然我在这两个网站上都看过多次,但似乎可以改变“除了”之外的任何东西输入框。背景会改变输入框后面的颜色,等等,但所有选项似乎都不会改变实际的输入框。您是否尝试过用
前景
代替
背景
是的,但它只是改变了“字体颜色”嗯,从未遇到过这种情况。我不确定你是否可以改变框的实际颜色。唯一不清楚的是你如何访问“fieldbackground”,没有找到任何关于它的文档,而且它似乎既不在“python path/tcl”中,也不在“python path/Lib/tkinter”中。我还注意到你似乎不需要“estyle.element\u create()”,没有它也一样。。。。。(如果你不想的话,不需要进一步回答,我肯定我会在dept=D中找到它的确切工作原理)不久前我遇到了与此相同的问题,所以我只是将代码粘贴在这里。我真的不记得我是怎么找到它的,但我想我看到一个网站解释了它是如何工作的(不过没有链接)=P
from tkinter import *
from tkinter import ttk

root_window = Tk()

estyle = ttk.Style()
estyle.element_create("plain.field", "from", "clam")
estyle.layout("EntryStyle.TEntry",
                   [('Entry.plain.field', {'children': [(
                       'Entry.background', {'children': [(
                           'Entry.padding', {'children': [(
                               'Entry.textarea', {'sticky': 'nswe'})],
                      'sticky': 'nswe'})], 'sticky': 'nswe'})],
                      'border':'2', 'sticky': 'nswe'})])

estyle.configure("EntryStyle.TEntry",
    fieldbackground="light blue")           # Set color here

entry = ttk.Entry(root_window, style="EntryStyle.TEntry")
entry.pack(padx=10, pady=10)

root_window.mainloop()