【问题标题】:Changing rectangle color on click in Python using Tk使用 Tk 在 Python 中单击更改矩形颜色
【发布时间】:2016-05-05 21:42:29
【问题描述】:

我试图在画布上创建一个 Tk 矩形,以便在单击时更改其颜色。现在,单击矩形时不会发生颜色变化。我需要做些什么不同的事情?

顺便说一句,这是在 Python3.5 中。

from tkinter import *


def set_color(id):
    global alive, colors
    alive = not alive
    col = colors[alive]
    canvas.itemconfigure(id, fill=col)

root = Tk()
canvas = Canvas(root)
canvas.grid(column=1, row=1, sticky=(N, S, E, W))

alive = False
colors = {True: "green", False:  "red"}

id = canvas.create_rectangle((1, 1, 60, 60), fill="red")
canvas.tag_bind(id, "<ButtonPress-1>", set_color)


root.mainloop()

【问题讨论】:

    标签: python-3.x button tkinter tk


    【解决方案1】:

    将它包装在一个类中,并根据需要创建任意数量的实例。 http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm

    class OneSquare():
        def __init__(self, can, start_x, start_y, size):
            self.can=can
            self.id = self.can.create_rectangle((start_x, start_y,
                      start_x+size, start_y+size), fill="red")
            self.can.tag_bind(self.id, "<ButtonPress-1>", self.set_color)
    
            self.color_change=True
    
        def set_color(self, event=None):
            self.color_change = not self.color_change
            color="red"
            if not self.color_change:
                color="green"
            self.can.itemconfigure(self.id, fill=color)
    
    root = Tk()
    canvas = Canvas(root)
    canvas.grid(column=1, row=1, sticky=(N, S, E, W))
    
    OS1=OneSquare(canvas, 1, 1, 60)
    OS2=OneSquare(canvas, 90, 1, 30)
    OS3=OneSquare(canvas, 1, 90, 90)
    
    Button(root, text="Exit", bg="orange",
           command=root.quit).grid(row=2)
    
    root.mainloop()
    

    【讨论】:

      【解决方案2】:

      tag_bind 向函数发送一个事件,因此“id”被覆盖,现在包含该事件。所以你可以从

      def set_color(id):
      ## to
      def set_color(event=None):
      

      它会起作用,因为在这个程序中只有一个对象/id 需要处理。使用 event=None 是因为它在没有事件发送到函数时分配一个默认值,例如按下按钮,因此适用于所有响应。

      【讨论】:

      • 太好了,谢谢!如果我希望屏幕上有多个这些矩形,如何将事件绑定到特定矩形?
      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2018-02-11
      • 2016-08-12
      相关资源
      最近更新 更多