【发布时间】:2021-10-30 05:23:45
【问题描述】:
我想使用 tkinter Canvas 对象在屏幕上画笔迹。使用example code from the tkdocs website,当我使用 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。
到目前为止我尝试了什么:
- 不同的连接样式没有效果
- smooth 参数无效
- 不值得一提的各种不成功的肮脏黑客和变通方法
有人知道我如何摆脱这个神器吗?
谢谢!
【问题讨论】:
-
您可以尝试将
self.create_line替换为self.create_oval并检查是否会产生您想要的效果吗? -
是的,几乎成功了!我用两个
self.create_oval语句替换了self.create_line,用于“行”的开始和结束。如果我画得慢就行,如果我画得快就不行。
标签: python tkinter canvas drawing tkinter-canvas