Tkinter Canvas:更改选项而不更改其他选项或再次设置所有选项

2024-07-05 09:49:16 发布

您现在位置:Python中文网/ 问答频道 /正文

创建一个相当基本的窗口,并试图保持窗口中的所有内容都很好并且紧密地塞满,以便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)似乎也无关紧要,它具有相同的效果

我不想删除整个画布,它可能已经在其中绘制了对象,我不想在背景(或其他选项)更改时重新绘制所有内容


Tags: selfmaster属性columncolpartialbdtk
1条回答
网友
1楼 · 发布于 2024-07-05 09:49:16

Canvas(和其他小部件)可以有两个元素borderhighlight

如果您将bd设置为0或-2,那么您仍然可以看到highlight,您可以使用'highlightthickness': 0删除它

相关问题 更多 >