vscode可视化代码片段编辑软件

1 篇文章 0 订阅
1 篇文章 0 订阅

用vscode但是没有找到像pycharm那样可以可视化编辑代码片段的插件
所以自己写了一个软件可视化编辑vscode的代码片段
此软件为py代码,自己写了
使用方法,运行一次后会生成config.ini 文件
修改代码片段路径


 


 

from tkinter import *
from tkinter import messagebox
import pickle
import os
import json

def load_config():
    import configparser
    fname='config.ini'
    config = configparser.ConfigParser()
    if not os.path.exists(fname):
        config['conf'] = {'文件路径': r'C:\Users\Administrator\AppData\Roaming\Code\User\snippets\全局.code-snippets',
                          '默认类型':'python,javascript,java,javascript,typescript'}
        with open(fname, 'w',encoding='utf-8-sig') as f:
            config.write(f)
    config.read(fname,encoding='utf-8-sig')
    return config
class Application(Frame):
    '''GUI程序经典写法'''
    def __init__(self,master = None):
        super().__init__(master)
        # super() 表示父类的定义,父类使用 master 参数
        self.master = master
        # 子类定义一个属性接收传递过来的 master 参数
        self.pack()
        # .pack 设置布局管理器
        self.createWidget()
        # 在初始化时,将按钮也实现
        # master传递给父类 Frame 使用后,子类中再定义一个 master 对象
        self.current_name=''
        self.data={}
        self.conf=load_config()
        self.save_path=self.conf['conf']['文件路径'].strip()
        self.default_type=self.conf['conf']['默认类型'].strip()
        self.data=self.load_data()
        self.load_list_box()
    def createWidget(self):
        '''创建组件'''
        self.name=StringVar()
        self.code=StringVar()
        self.type=StringVar()
        self.body=StringVar()
        frame=Frame(self)
        frame.pack(fill=BOTH,expand=True)
        frame_left=Frame(frame)
        frame_left.pack(side='left',fill=BOTH,expand=True)
        self.list_box=Listbox(frame_left,selectmode=EXTENDED,width=50)
        self.list_box.pack(fill=Y,expand=True)
        self.list_box.bind('<<ListboxSelect>>',self.click_item)
        frame_right=Frame(frame)
        frame_right.pack(side='right',fill=BOTH,expand=True)
        frame1=Frame(frame_right)
        frame2=Frame(frame_right)
        frame3=Frame(frame_right)
        frame4=Frame(frame_right)

        self.label_code=Label(frame2,text='代码')
        self.label_msg = Label(frame1, text='名字')
        self.label_type=Label(frame3,text='类型')
        self.label_msg.pack(side='left')
        self.label_code.pack(side='left')
        self.label_type.pack(side='left')
        self.enter_name=Entry(frame1,textvariable=self.name)
        self.enter_code=Entry(frame2,textvariable=self.code)
        self.enter_type=Entry(frame3,textvariable=self.type)
        self.enter_body=Text(frame4,width=100,height=50)
        self.enter_name.pack(fill=X)
        self.enter_code.pack(fill=X)
        self.enter_type.pack(fill=X)
        self.enter_body.pack(fill=X)
        frame2.pack(fill=X, side=TOP)
        frame1.pack(fill=X, side=TOP)
        frame3.pack(fill=X,side=TOP)
        frame4.pack(fill=BOTH,side=TOP)


        frame5=Frame(frame_right)
        frame5.pack(fill=Y)
        self.btn_add=Button(frame5,text='添加',width=10,command=self.add)
        self.btn_del=Button(frame5,text='删除',width=10,command=self.delete)
        self.btn_edit = Button(frame5, text='修改', width=10, command=self.edit)
        self.btn_clear=Button(frame5,text='清空', width=10, command=self.clear)
        self.btn_clear.pack(side='right')
        self.btn_edit.pack(side='right')
        self.btn_del.pack(side='right')
        self.btn_add.pack(side='right')
    def load_list_box(self):
        self.list_box.delete(0,'end')
        self.lst=list(self.data.keys())
        for item in self.lst:
            self.list_box.insert('end', '{}'.format(self.data[item]['prefix']))
        self.save_data()
    def save_data(self):
        with open('data','wb') as f:
            pickle.dump(self.data,f)
        with open(self.save_path,'w',encoding='utf-8-sig') as f:
            json.dump(self.data,f,ensure_ascii=False)
    def load_data(self):
        try:
            with open('data','rb') as f:
                return pickle.load(f)
        except:
            self.save_data()
            return {}
    def add(self):
        name=self.name.get()
        code=self.code.get()
        type=self.type.get()
        body=self.enter_body.get('0.0','end')
        if all([name,code,body]):
            if name in self.data.keys():
                return self.show('错误', '名称已存在')
            if code in [x['prefix'] for x in self.data.values()]:
                return self.show('错误','代码已存在')
            self.data[name] = {'prefix': code, 'scope': type if type.strip() else self.default_type , 'body': body, 'description': ''}
        self.load_list_box()
    def edit(self):
        name = self.name.get()
        code = self.code.get()
        type = self.type.get()
        body = self.enter_body.get('0.0', 'end')
        if self.current_name!=name:
            if name in self.data.keys():
                return self.show('错误','名字重复')

        if self.data[self.current_name]['prefix']!=code:
            if code in [x['prefix'] for x in self.data.values()]:
                return self.show('错误','代码重复')

        self.data.pop(self.current_name)
        if all([name, code, body]):
            self.data[name] = {'prefix': code, 'scope': type if type.strip() else self.default_type,
                               'body': body, 'description': ''}
        self.load_list_box()
    def delete(self):
        ids=self.list_box.curselection()
        if ids:
            for i in ids:
                self.data.pop(self.lst[i])
            self.load_list_box()
    def clear(self):
        self.name.set('')
        self.code.set('')
        self.type.set(self.default_type)
        self.enter_body.delete('0.0','end')
        self.current_name=''
    def click_item(self,event):
        ids=self.list_box.curselection()
        if ids:
            name=self.lst[ids[0]]
            self.name.set(name)
            item=self.data[name]
            self.code.set(item['prefix'])
            self.type.set(item['scope'])
            self.enter_body.delete('0.0','end')
            self.enter_body.insert('end',item['body'])
            self.current_name=name
    def show(self,title,msg):
        messagebox.showinfo(str(title),str(msg))
    def close(self):
        self.save_data()
        print('保存')
        root.destroy()
if __name__ == '__main__':
    root = Tk()
    # 定义主窗口对象
    #root.geometry("1000x500+200+300")
    # 创建大小
    root.title("Vscode代码片段管理器")
    app = Application(master = root)
    # 传递 master 参数为 主窗口对象
    root.protocol('WM_DELETE_WINDOW', app.close)
    root.mainloop()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wgnms

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

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

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

打赏作者

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

抵扣说明:

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

余额充值