完整源码在文末,可直接下载使用,也可在此基础上做定制开发。
应用场景:上传图片,自动生成Turtle代码。点击执行代码,可把图片完整画出来。
功能特点:支持设置背景图片,可在背景图片上嵌入式画图,很有意思。
软件截图:
核心源码:
import tkinter as tk
from tkinter import filedialog, ttk
from PIL import Image, ImageTk
import numpy as np
import cv2
import sys
from io import StringIO
import threading
from pathlib import Path
class ImageToTurtleApp:
def __init__(self, root):
self.root = root
self.root.title("图片转Turtle代码生成器 (轮廓版)")
self.root.geometry("1200x800")
# 创建主框架
self.main_frame = ttk.Frame(self.root, padding="10")
self.main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# 左侧面板 - 图片显示和控制
self.left_frame = ttk.Frame(self.main_frame)
self.left_frame.grid(row=0, column=0, padx=5, pady=5)
# 上传按钮
self.upload_btn = ttk.Button(self.left_frame, text="上传图片", command=self.upload_image)
self.upload_btn.grid(row=0, column=0, pady=5)
# 图片显示区域
self.image_label = ttk.Label(self.left_frame)
self.image_label.grid(row=1, column=0)
# 在左侧面板添加背景图片预览区域
ttk.Label(self.left_frame, text="背景图预览:").grid(row=2, column=0, pady=(10,0))
self.bg_preview_label = ttk.Label(self.left_frame)
self.bg_preview_label.grid(row=3, column=0)
# 中间面板 - 代码显示
self.middle_frame = ttk.Frame(self.main_frame)
self.middle_frame.grid(row=0, column=1, padx=5, pady=5)
# 参数控制区域
self.control_frame = ttk.LabelFrame(self.middle_frame, text="参数控制", padding="5")
self.control_frame.grid(row=0, column=0, pady=5, sticky="ew")
# 阈值滑块
ttk.Label(self.control_frame, text="阈值:").grid(row=0, column=0)
self.threshold_var = tk.IntVar(value=50)
self.threshold_scale = ttk.Scale(
self.control_frame,
from_=10, # 最小阈值
to=200, # 最大阈值
orient="horizontal",
variable=self.threshold_var,
command=self.update_preview
)
self.threshold_scale.grid(row=0, column=1, padx=5)
# 添加轮廓精度控制
ttk.Label(self.control_frame, text="轮廓精度:").grid(row=2, column=0)
self.epsilon_var = tk.DoubleVar(value=0.0005) # 降低默认精度值
self.epsilon_scale = ttk.Scale(
self.control_frame,
from_=0.0001,
to=0.005, # 减小最大值
orient="horizontal",
variable=self.epsilon_var,
command=self.update_preview
)
self.epsilon_scale.grid(row=2, column=1, padx=5)
# 添加最小轮廓尺寸控制
ttk.Label(self.control_frame, text="最小轮廓:").grid(row=3, column=0)
self.min_size_var = tk.IntVar(value=3)
self.min_size_scale = ttk.Scale(
self.control_frame,
from_=2,
to=20,
orient="horizontal",
variable=self.min_size_var,
command=self.update_preview
)
self.min_size_scale.grid(row=3, column=1, padx=5)
# 在参数控制区域添加背景图片控制
ttk.Label(self.control_frame, text
标签:Turtle,代码生成,column,self,ttk,源码,grid,frame,row From: https://blog.csdn.net/mosquito_lover1/article/details/145170974