创建一个相当基本的窗口,并试图保持窗口中的所有内容都很好并且紧密地塞满,以便grid
中的项目之间没有间隙,这需要将canvas
的边框设置为-2(恼人的,应该是0,但不同的一天会有不同的抱怨)。但是,当更新其他属性时(在本例中是bg
),该bd
属性会被不可修复地重置。请求该属性返回它被设置为的-2,但是canvas
的行为好像它不是(即,canvas
似乎有一个bd
值0,尽管在被询问时说它有-2)
如何只更新一个属性而不破坏bd
属性?
或者
在对象已经存在之后,如何将它的所有属性同时设置为与创建时类似的属性,以便bd
实际生效?
一个简单的例子,让你玩它:
import tkinter as tk
from functools import partial
class MyGUI:
def __init__(self, master):
self.master = master
self.buttonx = tk.Button(master, text='goblue', command=partial(self.gocol, 'lightblue'), bg='lightblue')
self.buttonx.grid(row=1,column=0)
self.buttony = tk.Button(master, text='gogrey', command=partial(self.gocol, 'grey'), bg='grey')
self.buttony.grid(row=2,column=0)
self.canvasx_specs = {
'width' : 400,
'height' : 400,
'bg' : 'grey',
'bd' : -2
}
self.canvasx = tk.Canvas(master, **self.canvasx_specs)
self.canvasx.grid(rowspan=9,row=1,column=1)
def gocol(self, col):
## Method 1
self.canvasx['bg']=col
# self.canvasx.configure(bg=col)
## Method 2
# self.canvasx_specs['bg'] = col
# self.canvasx.configureall(**self.canvasx_specs)
top = tk.Tk()
mywin = MyGUI(top)
top.mainloop()
如果再次将bd
设置为-2似乎无关紧要,它仍然像0一样工作。如果使用members访问或configure
函数(请参见上面的方法1)似乎也无关紧要,它具有相同的效果
我不想删除整个画布,它可能已经在其中绘制了对象,我不想在背景(或其他选项)更改时重新绘制所有内容
Canvas
(和其他小部件)可以有两个元素border
和highlight
如果您将
bd
设置为0或-2,那么您仍然可以看到highlight
,您可以使用'highlightthickness': 0
删除它相关问题 更多 >
编程相关推荐