Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkk.Frame中奇怪的背景外观_Python_Tkinter - Fatal编程技术网

Python tkk.Frame中奇怪的背景外观

Python tkk.Frame中奇怪的背景外观,python,tkinter,Python,Tkinter,我在特金特发现了一个异常。我在下面附上了我的脚本以显示异常情况 运行这个脚本,我在我的系统(Ubuntu 16.04.03)上发现ttk.Frame的背景看起来很奇怪。如果我将鼠标指针移入和移出ttk.Frame,背景外观可能会发生变化并出现乱码(例如,可能会出现来自其他背景窗口的背景,可能会出现奇怪的颜色图案等) 经过一些调查,我发现用background='light purple'替换background='white',异常消失,ttk.Frame的外观表现符合定义。也就是说,故障是由于

我在特金特发现了一个异常。我在下面附上了我的脚本以显示异常情况

运行这个脚本,我在我的系统(Ubuntu 16.04.03)上发现
ttk.Frame
的背景看起来很奇怪。如果我将鼠标指针移入和移出
ttk.Frame
,背景外观可能会发生变化并出现乱码(例如,可能会出现来自其他背景窗口的背景,可能会出现奇怪的颜色图案等)

经过一些调查,我发现用
background='light purple'
替换
background='white'
,异常消失,
ttk.Frame
的外观表现符合定义。也就是说,故障是由于使用了tkinter无法识别的背景/颜色名称造成的

问题:

  • 这种异常是否发生在Mac、Windows或其他Linux系统中

  • tkinter接受的有效背景名称是什么?我不是 能够在tkinter的
    \uuuu init\uuuu.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()
    

    在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。