Tkinter:如何获取canvas.window()

时间:2015-12-14 06:57:31

标签: python canvas tkinter tk tkinter-canvas

我想了解如何抓住button小部件,它是canvas.window()项目的一部分,以更改其属性。

button1 = Button(self, text = "Quit", command = self.quit, anchor = W)
button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT)
button1_window = canvas1.create_window(10, 10, anchor=NW, window=button1)

在上面的代码段中,您可以看到我在窗口中嵌入了一个按钮。然后,我将此窗口嵌入canvas

现在,当用户点击button1_window项时,我想控制该窗口内的按钮,然后更改其属性,例如边框尺寸/颜色。

1 个答案:

答案 0 :(得分:2)

  

我想控制该窗口内的按钮然后   更改其属性,例如边框尺寸/颜色。

如果bind()是一个按钮的函数,那么当单击该按钮时,tkinter会将event object作为参数传递给该函数。 event object具有widget属性,该属性将是单击的按钮。以下是您可以执行的操作的示例:

import tkinter as tk

class MyFrame(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent) 

        canvas = tk.Canvas(
                    self, 
                    width = 300, 
                    height = 200)
        canvas.create_rectangle(0,0,300,200, fill="red")
        canvas.pack()

        button_texts = ['hello', 'world', 'goodbye', 'mars']

        for i, button_text in enumerate(button_texts):
            button = tk.Button(text=button_text)
            button.bind("<Button-1>", self.onclickButton)

            canvas.create_window(
                   100, 50 + 30*i,
                   window=button,
            )


    def onclickButton(self, evt):
        evt.widget.config(padx=100)
        print(evt.widget.cget('text'))


root = tk.Tk()
root.geometry("500x300+10+0")
MyFrame(root).pack()
root.mainloop()

enter image description here