python - 在 tkinter 画布上绘制一条粗曲线
问题描述
我想使用 tkinter Canvas 对象在屏幕上绘制笔迹。使用来自 tkdocs 网站的示例代码,当我使用 20 的大线宽时,我得到以下绘图工件:
但是,对于小线宽,一切都很好:
这是完整的 Python 代码:
from tkinter import *
from tkinter import ttk
class Sketchpad(Canvas):
def __init__(self, parent, **kwargs):
super().__init__(parent, **kwargs)
self.bind("<Button-1>", self.save_posn)
self.bind("<B1-Motion>", self.add_line)
def save_posn(self, event):
self.lastx, self.lasty = event.x, event.y
def add_line(self, event):
self.create_line((self.lastx, self.lasty, event.x, event.y))
self.save_posn(event)
root = Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
sketch = Sketchpad(root)
sketch.grid(column=0, row=0, sticky=(N, W, E, S))
root.mainloop()
我正在使用 Python 3.8。
到目前为止我尝试了什么:
- 不同的joinstyles没有效果
- 平滑参数没有效果
- 各种不成功的肮脏黑客和变通方法不值得一提
有人知道我如何摆脱这个神器吗?
谢谢!
解决方案
您可以capstyle='round'
使用create_line()
:
self.create_line((self.lastx, self.lasty, event.x, event.y), width=20, capstyle='round')
推荐阅读
- python - 我正在尝试在 cog(discord.py) 中创建一个邀请命令,该命令对用户进行 dms
- sequence - Teradata 根据前几行创建日期范围窗口
- node.js - 我正在尝试登录迪士尼商店。我尝试了许多不同的选择器,但它们似乎都不起作用。有什么帮助或提示吗?
- java - Spring Boot:延迟获取不适用于 getById()
- sql - 多次使用同一列时,SQL Server 无法将文本转换为时间
- python - 姜戈 | 在同一个模板上多次使用同一个表单
- reactjs - 在 Emotion 11/Next js 10 应用程序中启用 css 道具的正确方法是什么
- amazon-web-services - 如何将图像从 React Native 上传到 AWS S3?错误 403
- python - 未找到带有参数 '('',)' 的 'admin-color-product-map-edit' 的反向操作。尝试了 1 种模式:['admin1/colorProductMap_edit/(?P
[0-9]+)$'] - java - > 无法隔离参数 com.android.build.gradle