tkinter 绘制柱状图 当图窗缩小放大时 柱状图尺寸同时变化
时间: 2023-10-05 13:09:20 浏览: 79
实现柱状图自适应大小需要通过Tkinter的Canvas组件以及其中的create_rectangle()方法来绘制。具体实现步骤如下:
1. 创建Canvas对象,指定画布大小和背景色。
2. 计算柱状图中每个矩形的位置和大小。
3. 使用create_rectangle()方法在Canvas上绘制每个矩形。
4. 使用bind()方法绑定Canvas的"<Configure>"事件,当画布大小发生变化时,重新计算柱状图中每个矩形的位置和大小,并重新绘制。
下面是一个简单的示例代码,实现了柱状图自适应大小的功能:
```
import tkinter as tk
class BarChart(tk.Frame):
def __init__(self, parent, data, title):
tk.Frame.__init__(self, parent)
# 创建Canvas对象
self.canvas = tk.Canvas(self, bg='white', highlightthickness=0)
self.canvas.pack(fill=tk.BOTH, expand=True)
# 计算矩形的位置和大小
self.data = data
self.title = title
self.draw_chart()
# 绑定画布大小变化事件
self.canvas.bind('<Configure>', self.on_resize)
def draw_chart(self):
# 计算画布大小
width = self.canvas.winfo_width()
height = self.canvas.winfo_height()
# 计算矩形大小和位置
num_bars = len(self.data)
bar_width = width / num_bars
max_data = max(self.data)
scale = (height - 40) / max_data
# 绘制柱状图
for i in range(num_bars):
x0 = i * bar_width
y0 = height - (self.data[i] * scale)
x1 = x0 + bar_width
y1 = height - 20
self.canvas.create_rectangle(x0, y0, x1, y1, fill='blue')
# 添加标题
self.canvas.create_text(width/2, 10, text=self.title)
def on_resize(self, event):
# 重新计算矩形的位置和大小
self.canvas.delete('all')
self.draw_chart()
# 测试代码
if __name__ == '__main__':
data = [10, 20, 30, 40, 50]
title = 'Bar Chart'
root = tk.Tk()
root.geometry('400x300')
chart = BarChart(root, data, title)
chart.pack(fill=tk.BOTH, expand=True)
root.mainloop()
```
在上面的代码中,我们在BarChart类中创建了一个Canvas对象,并在其中绘制了柱状图。在draw_chart()方法中,我们计算了矩形的位置和大小,并使用create_rectangle()方法在Canvas上绘制了每个矩形。在on_resize()方法中,我们重新计算了矩形的位置和大小,并重新绘制了柱状图。
在测试代码中,我们创建了一个BarChart对象,并将其添加到主窗口中。当主窗口大小发生变化时,柱状图会自适应大小。
阅读全文