Python语言增强版数字画图软件带随机画图功能代码QZQ


import tkinter as tk
import random
from tkinter import Menu

class DigitalPainter:
    def __init__(self, root):
        self.root = root
        self.root.title("增强版数字画图程序")
        self.root.geometry("800x800")  # 增大窗口高度
        
        # 颜色映射表
        self.color_map = {
            '1': '#FF0000', '2': '#00FF00', '3': '#FFFF00',
            '4': '#0000FF', '5': '#800080', '6': '#00FFFF',
            '7': '#000000', '0': '#FFFFFF'
        }
        
        self.create_widgets()
        self.bind_events()
        
    def create_widgets(self):
        # 使用Text控件实现多行文本输入(自动换行)
        self.text = tk.Text(self.root, font=('Arial', 12), wrap=tk.WORD)
        self.text.place(x=220, y=880, width=600, height=330)  # 设置位置和大小  # 增加高度支持多行
        
        # 随机生成按钮
        self.random_btn = tk.Button(
            self.root,
            text="生成随机图案",
            command=self.generate_and_draw,
            font=('Arial', 12)
        )
        self.random_btn.place(x=230, y=1420, width=520, height=90)  # 右侧排列
        
        # 画布
        self.canvas = tk.Canvas(self.root, bg='white', bd=1, relief='solid')
        self.canvas.place(x=160, y=260, width=760, height=500)  # 占据下方大部分区域
        
        # 创建右键菜单
        self.context_menu = Menu(self.root, tearoff=0)
        self.context_menu.add_command(label="全选", command=self.select_all)
        self.context_menu.add_separator()
        self.context_menu.add_command(label="复制", command=self.copy_text)
        self.context_menu.add_command(label="粘贴", command=self.paste_text)
        self.context_menu.add_command(label="删除", command=self.delete_text)
        
    def bind_events(self):
        # 文本内容变化时自动绘制
        self.text.bind('<KeyRelease>', self.automatic_draw)
        # 绑定右键菜单
        self.text.bind('<Button-3>', self.show_context_menu)
        
    def automatic_draw(self, event):
        self.canvas.delete('all')
        input_str = self.text.get("1.0", tk.END).strip()  # 获取文本内容
        self.draw_pattern(input_str)
        
    def generate_and_draw(self):
        pattern = self.generate_random_pattern()
        self.text.delete("1.0", tk.END)  # 清空文本框
        self.text.insert(tk.END, pattern)  # 插入随机图案
        self.automatic_draw(None)
        
    def draw_pattern(self, input_str):
        x, y = 10, 10
        block_size = 20
        for char in input_str:
            if char == '\n':  # Text控件自动换行,用\n表示换行
                x = 10
                y += block_size + 3
                continue
            if char == '/':  # 保留/作为强制换行符
                x = 10
                y += block_size + 3
                continue
            color = self.color_map.get(char, '#D0D0D0')
            self.canvas.create_rectangle(
                x, y, x+block_size, y+block_size,
                fill=color, outline='#CCC', width=1
            )
            x += block_size + 3
            if x + block_size > 760 - 10:
                x = 10
                y += block_size + 3
                
    def generate_random_pattern(self):
        chars = ['0', '1', '2', '3', '4', '5', '6', '7', '/']  # 使用\n作为换行符
        pattern = []
        for _ in range(random.randint(200, 400)):
            if random.random() < 0.08:
                pattern.append('/')  # 自动换行符
            else:
                pattern.append(random.choice(chars[:8]))
        return ''.join(pattern)
        
    # 右键菜单功能
    def show_context_menu(self, event):
        self.context_menu.post(event.x_root, event.y_root)  # 在点击位置显示菜单
        
    def select_all(self):
        self.text.tag_add(tk.SEL, "1.0", tk.END)
        
    def copy_text(self):
        self.root.clipboard_clear()
        selected_text = self.text.selection_get()
        self.root.clipboard_append(selected_text)
        
    def paste_text(self):
        clipboard_text = self.root.clipboard_get()
        self.text.insert(tk.INSERT, clipboard_text)
        
    def delete_text(self):
        self.text.delete(tk.SEL_FIRST, tk.SEL_LAST) if self.text.selection_get() else None

if __name__ == "__main__":
    root = tk.Tk()
    app = DigitalPainter(root)
    root.mainloop()









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EasySoft易软

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值