Python绘制读数直尺,当前读数可调节
时间: 2023-11-19 14:12:21 浏览: 28
以下是一个示例代码,可以绘制一个读数直尺,并且可以通过鼠标拖动调节当前读数:
```python
import tkinter as tk
class ReadingRuler(tk.Canvas):
def __init__(self, parent, min_value, max_value, current_value, **kwargs):
super().__init__(parent, **kwargs)
self.min_value = min_value
self.max_value = max_value
self.current_value = current_value
self.configure(width=200, height=40)
self.bind("<Button-1>", self.on_click)
self.bind("<B1-Motion>", self.on_drag)
self.draw()
def draw(self):
self.delete("all")
# 绘制直尺底部线
self.create_line(0, 20, 200, 20)
# 绘制最小值和最大值标记
self.create_text(0, 30, text=str(self.min_value), anchor=tk.W)
self.create_text(200, 30, text=str(self.max_value), anchor=tk.E)
# 绘制当前值标记
x = 200 * (self.current_value - self.min_value) / (self.max_value - self.min_value)
self.create_text(x, 5, text=str(self.current_value), anchor=tk.N)
self.create_line(x, 0, x, 20)
def on_click(self, event):
# 点击直尺时,更新当前值并重新绘制
x = event.x
self.current_value = round(self.min_value + (self.max_value - self.min_value) * x / 200, 2)
self.draw()
def on_drag(self, event):
# 拖动直尺时,更新当前值并重新绘制
x = event.x
self.current_value = round(self.min_value + (self.max_value - self.min_value) * x / 200, 2)
self.draw()
if __name__ == "__main__":
root = tk.Tk()
root.title("Reading Ruler")
rr = ReadingRuler(root, 0, 100, 50)
rr.pack()
root.mainloop()
```
代码中定义了一个 `ReadingRuler` 类,继承自 `tk.Canvas`,并且实现了绘制直尺、更新当前值、拖动更新当前值等功能。在 `__init__` 方法中,初始化了最小值、最大值、当前值等属性,并且绑定了鼠标点击、拖动事件。在 `draw` 方法中,绘制了直尺底部线、最小值、最大值、当前值标记,并且根据当前值的位置绘制了当前值标记和垂直线。在 `on_click` 和 `on_drag` 方法中,更新了当前值,并且重新绘制了直尺。
在 `main` 函数中,创建了一个 `ReadingRuler` 实例,并且将其加入到窗口中显示。运行程序,可以看到一个读数直尺,可以通过鼠标拖动调节当前值。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)