问题是,如果您在下面运行此代码并调整窗口大小,则会得到 意外行为。小部件未按应有的方式呈现出来,背景也没有呈现 有一些奇怪的颜色。
我知道如果您设置了一个参数,那么您应该 用有效性值填充它。如果您确实像我一样用空字符串填充它 它不会抛出<_tkinter.TclError:未知颜色名称“”>。
我的问题是为什么我们 没有收到错误?那是tkinter的错误吗?因为如果您设置Canvas的bg参数 作为一个空字符串,您将得到一个错误:颜色名称未知“”
from tkinter import Tk, Frame, Button, Entry, Canvas
class Gui(Frame):
def __init__(self, master):
self.master = master
self.font1 = font=("Segoe UI",18,"bold")
self.font2 = font=("Segoe UI",28,"bold")
Frame.__init__(self, self.master, bg="")
self.grid()
self.create_widgets()
def create_widgets(self):
self.frame_container = Frame(self, bg="")
self.frame_container.grid(row=0, column=0)
self.button_test_1 = Button(self, text="Test1", bg="yellow")
self.button_test_1.grid()
self.can = Canvas(self.frame_container, bg="orchid1")
self.can.grid(row=0, column=0)
self.entry_test = Entry(self.frame_container)
self.entry_test.grid(row=0, column=1)
if __name__ == "__main__":
root = Tk()
bug_gui = Gui(root)
root.mainloop()
答案 0 :(得分:0)
@Idlehands感谢您引用Fredrik Lundh在background
上的effbot.org解释。我想我终于了解了Fredrik Lundh的文档。即
bg=""
是一个有效的参数,它将阻止更新Frame
小部件的背景,并且background
小部件的bg
或Frame
默认为应用程序背景色。 因此,当调整Tk窗口的大小时,例如当Tk窗口的右边缘向左移动以到达Canvas
小部件的右边缘,然后向右移动回到其原始位置时,会发生以下现象:
Frame
小部件的宽度减小了大小。发生这种情况时,我怀疑填充Tk
小部件的Frame
寡妇背景色会丢失。Frame
小部件的宽度接下来恢复到其原始大小时,需要使用定义的颜色更新(即填充)其背景。因为bg=""
阻止更新,即阻止用定义的背景色填充Frame小部件背景,所以Frame
小部件的背景将默认为“应用程序背景色”。意思是它将用Frame
小部件和Tk
窗口正后方区域的确切颜色填充,就好像它是“透明的”一样。 正在回答@Turjak_art问题,tkinter
不会产生错误或异常,因为bg=""
是Frame
小部件的有效参数。
编辑: