【发布时间】:2018-02-28 01:19:54
【问题描述】:
我在 tkinter 中发现了一个异常。我在下面附上了我的脚本以显示异常情况。
运行这个脚本,我在我的系统(Ubuntu 16.04.03)上发现ttk.Frame 的背景看起来很奇怪。如果我将鼠标指针移入和移出ttk.Frame,则背景外观可能会发生变化并出现乱码(例如,可能会出现来自其他背景窗口的背景,可能会出现奇怪的颜色图案......)。
经过一些调查,我发现通过将background='light purple' 替换为background='white',异常消失并且ttk.Frame 外观的行为符合定义。也就是说,错误是由使用 tkinter 无法识别的背景/颜色名称引起的。
问题:
此异常是否发生在 Mac、Windows 或其他 Linux 系统中?
tkinter 接受的有效背景名称是什么?我不是 能够在 tkinter 的
__init__.py或ttk.py中找到它。哪里可以 我找到他们了吗?- 我认为 tkinter 需要更强大的背景名称检查例程 以减轻这种异常。我应该向谁注意?
测试脚本:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
class App(ttk.Frame):
def __init__(self, parent=None, *args, **kwargs):
style=ttk.Style()
style.configure('App.TFrame', background='light purple')
ttk.Frame.__init__(self, parent, style='App.TFrame', borderwidth=10,
relief='raised', width=200, height=200)
self.parent = parent
self.parent.geometry('300x300')
if __name__ == '__main__':
root = tk.Tk()
app = App(root)
app.grid(row=0, column=0, sticky='nsew')
app.grid_propagate(0)
root.mainloop()
【问题讨论】:
-
我在 OSX 上看不到这个。事实上,我从未在任何平台上看到过这种情况。
-
@BryanOakley。谢谢。注意到该代码适用于 OSX。我已经在 2 个物理上不同的 Ubuntu 16.04.3 系统上进行了尝试,并且异常是可重复的。 tkinter 如何知道哪个背景名称有效?这是在 tkinter 还是 tcl 完成的?
-
@BryanOakley 我添加了另一个在物理上不同的 Ubuntu 16.04.3 系统上看到的异常图像。在这里,
ttk.Frame变成透明的,露出 tkinter 窗口后面的桌面壁纸。