在Tkinter的画布小部件中更改矩形的宽度

Chr*_*s F 3 python tkinter tkinter-canvas

在此示例代码中,我尝试了几种更改蓝色矩形宽度的方法。似乎没有任何作用。在代码中,“ a”表示介于1.00和0.00之间的float变量。该值用于计算“ b”,它是蓝色矩形的所需宽度(以像素为单位)。我有一些相当复杂的代码可以生成该值,至少可以正常工作。为了使代码正常工作,蓝色矩形的宽度必须取决于“ b”。我已经尝试过“ Canvas.itemconfig()”,但是它没有用。

import tkinter
from tkinter import *

root = Tk()

root.maxsize(320,240)       # Sets max size of window
root.minsize(320,240)

canvas_height = 23
canvas_width = 315

w = Canvas(root, width=canvas_width, height=canvas_height)
w.pack()
w.create_rectangle(5, canvas_height, canvas_width, 2, fill="yellow")
w.create_rectangle(5, canvas_height, canvas_width, 2, fill="blue")

a = 1.0 # More complicated code creates this float between 0.00 and 1.00. It is a percentage of the desired 'blue rectangle' width
b = int(a * canvas_width)

root.mainloop() 
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供帮助,我将不胜感激!

附言:我是Stackoverflow社区的新手,所以请让我知道我有什么办法可以使我的问题更容易回答。

Bry*_*ley 5

矩形由相对角的几个坐标定义。获取左边缘的坐标,将宽度添加到x坐标,然后使用它来设置右边缘的坐标。

首先,跟踪对象ID,以便以后进行更改:

blue = w.create_rectangle(5, canvas_height, canvas_width, 2, fill="blue")
Run Code Online (Sandbox Code Playgroud)

要调整大小,请获取坐标...

x0, y0, x1, y1 = w.coords(blue)
Run Code Online (Sandbox Code Playgroud)

做一些数学...

x1 = x0 + b
Run Code Online (Sandbox Code Playgroud)

并重置坐标

w.coords(blue, x0, y0, x1, y1)
Run Code Online (Sandbox Code Playgroud)