在我的Mac上使用基于Tkinter ttk的GUI时,我注意到背景颜色和Notebook小部件存在问题.将ttk.Frame添加为ttk.Notebook选项卡时,框架的显示背景与笔记本选项卡的“插入”背景不匹配.
如何使ttk.Frame与周围的背景颜色相匹配,而无需对非Mac用户看起来很奇怪的值进行硬编码?
我读了一些建议自定义样式的SO答案,但是在这种情况下如何查询父窗口小部件的背景颜色还不清楚.据我所知,他们都是一样的!
>>> ttk.Style().lookup("TFrame", "background")
'systemWindowBody'
>>> ttk.Style().lookup("Notebook", "background")
'systemWindowBody'
>>> ttk.Style().lookup("Notebook.client", "background")
'systemWindowBody'
>>> ttk.Style().lookup("Notebook.tab", "background")
'systemWindowBody'
以上屏幕截图的示例代码:
import Tkinter
import ttk
class GUI(object):
def __init__(self,root):
self.root = root
self.root.title(u"Frame Mismatch Example")
self.mainframe = ttk.Frame(self.root, padding=(6, 6, 12, 12))
self.mainframe.grid(sticky='nwse')
self.notebook = ttk.Notebook(self.mainframe)
self.tab1 = ttk.Frame(self.notebook)
ttk.Button(self.tab1, text='Exit', command=self.root.destroy).pack(padx=100, pady=100)
self.notebook.add(self.tab1, text="Tab 1")
self.notebook.pack()
def main():
root = Tkinter.Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
makeGUI = GUI(root)
root.mainloop()
if __name__ == '__main__':
main()
重要细节:这与Python 2.7.8,Tcl / Tk 8.5.15(由Tk.eval(‘info patchlevel’)报告)一起提供.
最佳答案 我遇到了’systemWindowBody’问题,只是使用sys.platform检查操作系统,并仅为OSX硬编码颜色.
如果您有大量小部件,则可以使用OSX的特定主题. (这是我发现的一个很好的tkinter主题答案:Change color of “tab header” in ttk.Notebook)
我知道这可能不太理想,但它至少会确保你不会搞砸其他平台上的外观.
在我的Mac上使用基于Tkinter ttk的GUI时,我注意到背景颜色和Notebook小部件存在问题.将ttk.Frame添加为ttk.Notebook选项卡时,框架的显示背景与笔记本选项卡的“插入”背景不匹配.如何使ttk.Frame与周围的背景颜色相匹配,而无需对非Mac用户看起来很奇怪的值进行硬编码?我读了一些建议自定义样式的SO答案,但是在这种情况下如何查询父窗口小部件的背景颜色还不清...
最近转战
Python
,在使用thinter控件时遇到一些问题,都说
Python
好学好用,刚一接触就碰到一些难题,在用TreeView显示表格数据时,没办法做到单个单元格
设置
字体
颜色
等,度娘百般搜索,官方文档,大概知道要用Style指定控件风格,于是又开始折腾style,碰到好多奇怪的事儿。现一一列出,希望有
Python
大神给给预解惑,先谢谢!
下面是官方文档与度娘来的东东,显示结果如图片:
![Style风格测试](https://img-blog.csdnimg.cn/202106232111036.
ttk
bootstrap
Tkinter
TTK
的现代主题的集合,这些主题使用标准的跨平台主题(“蛤”,“ alt”,“经典”,“默认”)构建。 这些主题
中
的大多数都是从发布的开源引导主题改编和/或启发而来的。
pip install
ttk
bootstrap
您可以通过在
python
解释器
中
执行以下代码,在现场演示
中
查看以下示例
>> from
ttk
bootstrap import Demo
>> Demo ()
from
ttk
bootstrap import BootStyle ,
ttk
style = BootStyle ()
style . theme_use ( 'flatly' )
root = style . master
# create widget with primary colors
ttk
. Label ( root , text
同一控件,
ttk
的样式会覆盖tk的样式。
tk
中
有,而
ttk
中
没有的样式属性,按tk的方法
设置
,如‘sticky’在
ttk
就没有。
自定义的
ttk
样式有2部分组成,用’.'连接起来,如’myname.TRadiobutton‘,第一部分自己可以取名,第二部分固定。对于第二部分的固定值,参看文档
style =
ttk
.Style()
style.configure('myname.TRadiobutton', background='yellow')
r1=
ttk
.Radiobutton.
def __init__(self,master):
self.notebook =
ttk
.Notebook(master)
self.
frame
1 = tk.
Frame
(master)
self.
frame
2
root.title('NoteBook')
#用PhotoImage()实例化一个图像对象,参数是文件地址,可惜这能用gif图片
photo = PhotoImage(file = 'timg.gif')
the_Label = Label(root,text = '这是一只睡觉的小猫,\n王晓明看傻了!',
插入以下代码 :
.CodeMirror pre {font-family: Consolas; font-size: 12pt;}
* {font-family: Consolas;}
div.output_area pre {fon...
frame
=
ttk
.
Frame
(root, width=200, height=200)
frame
.configure(style='My.T
Frame
') #
设置
Frame
的样式
style =
ttk
.Style()
style.configure('My.T
Frame
', background='red') #
设置
Frame
的
背景
颜色
frame
.pack()
root.mainloop()
在这个示例
中
,我们首先导入
Tkinter
库并创建了一个Tk对象作为根窗口。然后,我们使用
ttk
模块
中
的
Frame
类创建了一个
Frame
对象,并
设置
了其宽度和高度。接下来,我们使用`configure()`方法为
Frame
设置
了一个自定义样式('My.T
Frame
'),然后使用
ttk
.Style类的`configure()`方法
设置
了该样式的
背景
颜色
为红色。最后,我们通过`pack()`方法将
Frame
放置在根窗口
中
。
你可以根据需要修改示例代码
中
的
背景
颜色
和其他属性来实现你所需的效果。希望对你有帮助!