如何通过在 tkinter 中获取当时的比例值来创建矩形?

how to create rectangles by getting scale values at the time in tkinter?

我想获取比例尺的值并创建与该值一样多的矩形。例如,如果我将比例调整为数字 7,则会创建 7 个彼此相邻的矩形,之后如果我将比例值调整为 3,则 canvas 中显示的矩形此时会减少到三个.我使用了下面的代码:

from tkinter import *
from tkinter import ttk

class rect:
    def __init__(self, root):
        self.root = root
        self.size = IntVar()
        self.canvas = Canvas(self.root, width=800, height=300)
        self.scale = Scale(self.root, orient=HORIZONTAL, from_=3, to=20, tickinterval=1, variable=self.size)
        self.show()

    def show(self):
        x = 50
        y = 50
        for i in range(self.scale.get()):
            self.canvas.create_rectangle(x, y, x + 50, y + 50, fill='red')
            x += 50
        self.canvas.pack()
        self.scale.pack()


root = Tk()
a = rect(root)
root.mainloop()

我想我必须使用 trace 方法,但我不知道该怎么做。 谁能按照我解释的方式修复我使用的代码。 谢谢。

一种解决方案是绑定到 <ButtonRelease>,并在那里调用您的 show 方法。由于事件绑定传递一个表示事件的对象,如果您还想调用 show 而不带任何参数,则需要将该对象设为可选参数。

例如:

class rect:
    def __init__(self, root):
        ...
        self.scale = Scale(...)
        self.scale.bind("<ButtonRelease>", self.show)

我猜您会想要删除之前绘制的所有矩形,因此您需要在创建矩形之前调用 delete

def show(...):
    self.canvas.delete("all")
    ...