Python tkk.Frame中奇怪的背景外观
我在特金特发现了一个异常。我在下面附上了我的脚本以显示异常情况 运行这个脚本,我在我的系统(Ubuntu 16.04.03)上发现Python tkk.Frame中奇怪的背景外观,python,tkinter,Python,Tkinter,我在特金特发现了一个异常。我在下面附上了我的脚本以显示异常情况 运行这个脚本,我在我的系统(Ubuntu 16.04.03)上发现ttk.Frame的背景看起来很奇怪。如果我将鼠标指针移入和移出ttk.Frame,背景外观可能会发生变化并出现乱码(例如,可能会出现来自其他背景窗口的背景,可能会出现奇怪的颜色图案等) 经过一些调查,我发现用background='light purple'替换background='white',异常消失,ttk.Frame的外观表现符合定义。也就是说,故障是由于
ttk.Frame
的背景看起来很奇怪。如果我将鼠标指针移入和移出ttk.Frame
,背景外观可能会发生变化并出现乱码(例如,可能会出现来自其他背景窗口的背景,可能会出现奇怪的颜色图案等)
经过一些调查,我发现用background='light purple'
替换background='white'
,异常消失,ttk.Frame
的外观表现符合定义。也就是说,故障是由于使用了tkinter无法识别的背景/颜色名称造成的
问题:
\uuuu init\uuuu.py
或ttk.py
中找到它。哪里可以
我找到了吗#!/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()
在Win 10,3.7.0b1上,没有背景以白色给出结果,可识别的背景就是它,未知背景(“浅紫色”或“xyz”)是黑色。至于公认的颜色名称: 8.5参考说明“颜色‘白色’、‘黑色’、‘红色’、‘绿色’、‘蓝色’、‘青色’、‘黄色’和‘洋红’将始终可用。其他名称可能适用,具体取决于您的本地安装。”
文档中列出了数百种颜色名称(但不是“浅紫色”!)以及一些特定于MacOS和Windows的颜色名称。在Win 10,3.7.0b1上,没有背景显示为白色,已识别的背景显示为白色,未知背景(“浅紫色”或“xyz”)显示为黑色。至于公认的颜色名称: 8.5参考说明“颜色‘白色’、‘黑色’、‘红色’、‘绿色’、‘蓝色’、‘青色’、‘黄色’和‘洋红’将始终可用。其他名称可能适用,具体取决于您的本地安装。”
这些文档列出了数百种颜色名称(但不是“浅紫色”!)以及一些特定于MacOS和Windows的颜色名称。我在OSX上看不到这一点。事实上,我从未在任何平台上看到过这种情况。@BryanOakley。谢谢注意,该代码在OSX上工作。我已经在两个物理上不同的Ubuntu 16.04.3系统上试用过,这种异常现象是可以重复的。tkinter如何知道哪个背景名称有效?这是在tkinter还是tcl上完成的?@BryanOakley我添加了另一张在物理上不同的Ubuntu 16.04.3系统上看到的异常图像。在这里,
ttk.Frame
变得透明,露出了tkinter窗口后面的桌面壁纸。我在OSX上看不到这一点。事实上,我从未在任何平台上看到过这种情况。@BryanOakley。谢谢注意,该代码在OSX上工作。我已经在两个物理上不同的Ubuntu 16.04.3系统上试用过,这种异常现象是可以重复的。tkinter如何知道哪个背景名称有效?这是在tkinter还是tcl上完成的?@BryanOakley我添加了另一张在物理上不同的Ubuntu 16.04.3系统上看到的异常图像。在这里,ttk.Frame
变得透明,显示了tkinter窗口后面的桌面墙纸。当声明无效的颜色名称时,人们会认为tcl会抛出错误消息。我想知道他们为什么不这样做?@SunBear我怀疑,因为颜色名称的有效性取决于所用操作系统的版本,也许还取决于“本地安装”的其他功能,因为有些tk程序打算跨平台工作。任何这样的决定都需要权衡。我恰好回答了@Idlehands提出的一个相关问题。看见根据我在那里学到的知识,我得出结论,Frame
小部件应该为无法识别的颜色名称引发一个异常。目前,Frame
窗口小部件背景正在生成Tk
窗口及其内容的多个快照,这些快照有时以级联和随机顺序出现。我认为不应该允许这种情况发生,也就是说,需要一个bug修复程序。有人会认为tcl会在声明无效的颜色名称时抛出错误消息。我想知道他们为什么不这样做?@SunBear我怀疑,因为颜色名称的有效性取决于所用操作系统的版本,也许还取决于“本地安装”的其他功能,因为有些tk程序打算跨平台工作。任何这样的决定都需要权衡。我恰好回答了@Idlehands提出的一个相关问题。看见根据我在那里学到的知识,我得出结论,Frame
小部件应该为无法识别的颜色名称引发一个异常。目前,Frame
窗口小部件背景正在生成Tk
窗口及其内容的多个快照,这些快照有时以级联和随机顺序出现。我认为不应该允许这种情况发生,即需要修复bug。