python怎么做笔记本(文本编辑器)

保姆级2.0简易文本编辑器Python 通过对简易文本编辑器性能的初步分析,决定使用搜索算法、撤销和重做算法、自动保存算法、滚动条处理算法、字体大小调整算法,并进入详细设计阶段,详细设计阶段分为界面设计和代码设计,初步打算利用C语言实现程序,但由于搭建图形用户界面库,最后选择了python,pycharm中自带的库,下载 tkinter创建 GUI 界面,但是由于学会的python知识比较少只能实现对文本文件新建、打开、保存、另存、查找、替换文本、插入、删除、撤销和重做等基本操作。菜单模块,包括文件、编辑、视图等菜单,提供各种操作和功能; 阅读详情

最近绞尽脑汁做了一个功能十分详细的文本编辑器,可能已经比得上microsoft的笔记本了,接下来我给你们介绍一下怎么做

本文章是作者自己的知识产权,可以让你们复制而且不付钱已经是很良心了,请多多点赞、收藏、阅读、评论,谢谢!

from tkinter import *
import windnd
from tkinter.messagebox import *
from tkinter.scrolledtext import *
from easygui import *
class gui():
    def __init__(self):
        self.win=Tk()
        self.win.geometry('892x685')
        self.win.title('文本编辑器')
        self.ss=False
        self.menu()
        self.text()
        self.tools()
    def menu(self):
        self.menubar=Menu(self.win,tearoff=0)
        self.file=Menu(self.menubar)
        self.file.add_command(label='新建',command=self.new,accelerator='ctrl+n')
        self.win.bind('<Control-N>',self.new)
        self.file.add_command(label='打开',command=self.op,accelerator='ctrl+o')
        self.win.bind('<Control-O>',self.op)
        self.file.add_command(label='保存',command=self.save,accelerator='ctrl+s')
        self.win.bind("<Control-S>",self.save)
        self.file.add_separator()
        self.file.add_command(label='清空',command=self.clear,accelerator='alt+c')
        self.win.bind("<Alt-C>",self.clear)
        self.file.add_separator()
        self.file.add_command(label='最小化',command=self.clo,accelerator='ctrl+q')
        self.win.bind('<Control-Q>',self.clo)
        self.file.add_command(label='关闭',command=self.ex,accelerator='alt+f4')
        self.win.bind("<Alt-F4>",self.ex)
        self.menubar.add_cascade(label='文件',menu=self.file)
        self.edit=Menu(self.menubar)
        self.edit.add_command(label='粘贴',command=self.pasts,accelerator='ctrl+v')
        self.win.bind("<Control-V>",self.pasts)
        self.edit.add_command(label='复制',command=self.copy,accelerator='ctrl+c')
        self.win.bind("<Control-C>",self.copy)
        self.edit.add_command(label='剪切',command=self.cut,accelerator='ctrl+x')
        self.win.bind("<Control-X>",self.cut)
        self.edit.add_separator()
        self.edit.add_command(label='撤销',command=self.undo,accelerator='ctrl+u')
        self.win.bind("<Control-U>",self.undo)
        self.edit.add_command(label='恢复',command=self.redo,accelerator='ctrl+r')
        self.win.bind("<Control-R>",self.redo)
        self.menubar.add_cascade(label='编辑',menu=self.edit)
        self.window=Menu(self.menubar)
        self.window.add_command(label='修改字体颜色',command=self.edd,accelerator='ctrl+f')
        self.win.bind("<Control-F>",self.edd)
        self.window.add_command(label='搜索',command=self.find,accelerator='alt+f')
        self.win.bind('<Alt-F>',self.find)
        self.menubar.add_cascade(label='窗口',menu=self.window)
        self.menubar.add_command(label='帮助',command=self.hlp)
        self.win.bind("<Control-H>",self.hlp)
        self.win['menu']=self.menubar
        windnd.hook_dropfiles(self.win,func=self.eve)
    def text(self):
        self.test=ScrolledText(self.win,width=96,height=29,undo=True)
        self.test.pack(expand=YES,fill=BOTH)
    def tools(self):
        self.frame=Frame(self.win,width=892,height=23)
        self.frame.pack(side=BOTTOM,fill=X)
        self.st=StringVar()
        self.st.set('第1行,第1列')
        self.l=Label(self.frame,textvariable=self.st)
        self.l.pack(side=LEFT,fill=X)
        self.win.bind("<Key>",self.pos)
        self.win.bind("<Button-1>",self.pos)
        self.win.bind("<Button-3>",self.me)
        self.win.protocol('WM_DELETE_WINDOW',self.bc)
    def new(self):
        if self.ss:
            a=buttonbox(msg='你是否要保存?',title='保存',choices=['是','否'])
            if a=='是':
                self.save()
            self.clear()
        self.ss=False
        self.win.title('untitle')
    def op(self):
        try:
            a=askopenfilename(defaultextension='.txt')
            b=open(a,'r',encoding='utf-8')
            c=b.read()
            self.test.delete(1.0,END)
            self.test.insert(END,c)
            b.close()
        except:
            showerror(title='错误',message='文本编辑器不能打开此文件!')
    def save(self):
        a=asksaveasfilename()
        fi=open(a,'w')
        fi.write(self.test.get(1.0,END).strip())
        fi.close()
        self.ss=True
        self.win.title('文本编辑器 '+str(a))
    def clear(self):
        self.test.delete(1.0,END)
    def clo(self):
        self.win.iconify()
    def ex(self):
        self.win.destroy()
    def pasts(self):
        self.test.event_generate("<<Paste>>")
    def copy(self):
        self.test.event_generate("<<Copy>>")
    def cut(self):
        self.test.event_generate("<<Cut>>")
    def undo(self):
        self.test.event_generate("<<Undo>>")
    def redo(self):
        self.test.event_generate("<<Redo>>")
    def eve(self,files):
        ss=files[0]
        bd=ss.decode('gbk')
        a=open(bd,'r')
        msg=a.read()
        self.test.insert(END,msg)
        self.win.title('文本编辑器 '+str(bd))
    def pos(self,event):
        po=str(self.test.index('insert')).split('.')
        msg='第'+str(po[0])+'行,第'+str(po[1])+'列'
        self.st.set(msg)
    def me(self,event):
        self.edit.post(event.x_root,event.y_root)
    def bc(self):
        a=buttonbox(msg='你要保存吗?',title='保存',choices=['是','否'])
        if a=='是':
            self.save()
            self.win.destroy()
        else:
            self.win.destroy()
    def edd(self):
        a=enterbox('请输入你要变化的颜色','字体颜色')
        try:
            tag=self.test.tag_add('tag1','1.0','end')
            self.test.tag_config('tag1',foreground=a)
        except:
            showerror('错误','没有此颜色')
    def find(self):
        a=enterbox('请输入你要搜索的内容','搜索')
        b=self.test.search(a, '1.0', stopindex=END)
        print(b)
        if not b:
            showerror('错误','没有此内容!')
        else:
            showinfo('查找成功','在第%s行第%s列'%(b.split('.')[0],str(int(b.split('.')[1])+1)))
    def hlp(self):
        a=Tk()
        b=Label(a,text='pythonitstream原创,不可转载!!')
        b.pack()

if __name__=='__main__':
    gui()
mainloop()

 

特长对不对?那好,我来分段解释

我这是python3.8.3,请不同版本的人不要误会

1)导入部分

可以看到前面我就用6行的篇幅导入了本程序需要的库,可见本程序不简单

tkinter:内置库,一个非常复杂的GUI库

tkinter.messagebox:内置库,属于一个tkinter下的库。导入tkinter时,会导入tkinter文件夹里的__init__文件(主文件),但还有几个文件没有被导入,哪个需要哪个导入。一个tkinter里的信息框库

tkinter.scrolledtext:内置库,原理同tkinter.messagebox。一个tkinter里的添加有滚动条的文本框的库

在此声明一下,我导入scrolledtext不是装B,由于Text和ttk.Scrollbar绑定太复杂,而且还需要导入另外一个库:tkinter.ttk,所以由于麻烦,我才导入的。请大家不要误解

easygui:外置库,需要自己下载。相当于tkinter.simpledialog的一个简单的GUI库

windnd:外置库,需要自己下载。用来检测Tk窗口的事件【普通事件可以用bind来检查,但是特殊事件(比如有文件拖入窗口)就得用windnd】

2)__init__部分

__init__初始函数我就不用介绍了吧?我相信大伙都知道

前三行创建窗口、设置大小、设置标题我就不用介绍了

值ss:正在打开的文件是否保存

方法menu:设置菜单并绑定关于菜单的事件

方法text:创建文本框

方法tools:绑定事件并添加工具栏

3)方法menu

方法menu好像是这个类里面最长的一个方法了……

首先我们回顾一下tkinter的菜单如何写

菜单基类.add_command(label=菜单文本,command=菜单被触发时的函数,accelerator=快捷键)

声明:accelerator快捷键只是标注一下,并没有绑定

所以我们还要绑定菜单的快捷键

基类.bind('<快捷键>',触发函数)

这是绑定事件的语法

鼠标也是这样绑定的

所以这个方法就是绑定菜单,绑定快捷键

最后一行我绑定了把文件拖拽到窗口内部时的事件,我们要把文件的路径获得,并打开文件、读取文件,之后把文件内容呈现到文本框里

4)方法text

这个好像不用我多说,这玩意只是创建一个文本框,undo=True是指可以撤销,默认为False

5)方法tools

这个方法用来添加文本框下面的工具栏(显示第几行,第几列),主要就是弄一个Frame,然后染色,然后在里面添加一个绑定过StringVar的Label,就是工具栏了!啦啦啦!

每当用户按下键盘或鼠标左键的时候,这时候意味着文本框中的光标的位置出现了变化,所以我们也要更新Label里面的内容啦!

Tk.protocol好像说起来有点复杂,它用来检测窗口的属性变化事件。WM_DELETE_WINDOW就是关闭窗口的事件,关闭窗口要询问用户保不保存

6)方法new

new就是新的的意思,在这里用于新建文档

首先判断用户是否保存,保存了才能新建

self.clear是清屏的函数,我自己后面写的

新建后,把self.ss调整为未保存,把标题调整为untitled,这和普通笔记本没啥区别

7)方法op

op在这里是一个简写,全写为open,但我怕和内置函数混了,所以用的缩写

askopenfilename是easygui库的一个函数,用来返回用户所选的路径

之后就是打开文件,读取文件,关闭文件,显示到文本框里

encoding是用来改变打开文件时文件的打开格式,如utf-8等,没有这个会报错

我还加了一个错误判断,用来识别用户是不是捣乱了,打开了笔记本无法打开的文件

8)方法save

save用来保存文件,准确的说是save as另存为

asksaveasfilename也是easygui中的一个函数,它用来返回用户想保存的路径

open(a,'w')中的w是指“写”形式打开文件,如果文件不存在,会自动创建。打开以后,会清空文件的所有内容,写出代码里想要有的内容

写完文件之后把self.ss改成True就行了

9)方法clear

清屏的方法

self.text.delete是用来清空文本框一部分的内容

第一个参数是几行,几列,第二个也是,但是可以填写'end',用来表示到最后

所以1.0到end就是清到最后了

10)方法clo

用来最小化窗口

Tk.iconify是最小化窗口的方法

11)方法ex

用来关闭窗口

Tk.destroy是关闭窗口的方法

12)方法pasts

其实我当时不想和paste重名,所以我就写了pasts

用来粘贴文本

13)方法copy

用来复制文本框选中的内容

14)方法cut

用来剪切文本框选中的内容

15)方法undo

用来撤销文本框中的操作

16)方法redo

用来恢复文本框中的操作

17)方法eve

之前我在menu方法的结尾写了这行代码:

windnd.hook_dropfiles(self.win,func=self.eve)

用来检测有没有文件被拖拽到窗口范围里,绑定的触发函数是self.eve

这个函数用来打开拖拽的文件,获取其内容,并呈现到文本框里

由于windnd.hook_dropfiles对绑定的触发函数会返回一个值,所以files就是那个值,用来当作拖拽文件的路径

感叹!windnd创始人牛!牛!再牛!鼓掌!

但是读文件前,要把这个one year搞成gbk格式的,不然读不了

读完之后,就可以把他显示到文本框里了

18)方法pos

我在前面绑定了pos方法,把它当作get文本框中光标位置的函数,并写出来

Text.index('insert')就是获取文本框里光标的位置的方法,再把它改到工具栏的Label里,就行了

注意,这里的光标不是鼠标箭头,而是文本框中一闪一闪,被视作写文本的地方的光标

19)方法me

Menu类有一个特别的方法,叫post,用来把菜单显示到某个位置,而event是bind提供综合信息的参数,event.x_root和event.y_root就是光标的xy位置

这个方法就是用来添加一个右键菜单(和edit菜单一样)

20)方法bc

这方法用来在关闭窗口时询问用户保不保存,保存就self.save(),不保存就直接关了

21)方法edd

用来改变文字颜色,这玩意的tag有点复杂,做出如下解释

Text.tag_add就是添加一个tag,第一个参数为tag名,第二个参数为tag颜色起始位置,第三个参数为tag颜色终止位置

Text.tag_config就是“激活”tag,将tag显示出来。第一个参数就是tag名,第二个参数是tag颜色

22)方法find

用来查找某个字符串的位置。其中,Text.search就是查找字符串在哪的函数

第一个参数是要查找的字符串,第二个参数是查找的起始范围,stopindex就是查找的终止范围,可以写'end'

23)方法hlp

此处是help的缩写,提供一个小窗口,写着作者信息

是不是很详细?好了,本文章的内容就到这里,感谢大家的收听,观众们洗洗睡吧!

非喜勿喷!!

Python自制文本编辑器 Python自制文本编辑器。 阅读详情

相关推荐

python基础项目实战-简易文本编辑器

在这里我简单编写了文本编辑器的部分功能,还有一些没有完善,感兴趣的友友们可以自己尝试完善后面的功能。

a316495442的博客 1917

5个最佳 Python IDE 和文本编辑器!

大家好,在本篇文章中,我将分享5款非常棒的 Python IDE 和文本编辑器。在介绍之前,我们来讲一下 IDE 和文本编辑器之间的区别

Python栈 1783

Altium Designer 16安装教程(Windows11、小白教程)

Altium Designer 16在Windows11中的超详细安装教程

qq_47003770的博客 1万+

一文读懂Python文本编辑器IDLE(2)

IDLE 是 Python 自带的简易开发环境,python安装完成后,在 Windows 开始菜单中找到Python文件夹,在这里可以看到 IDLE 工具

swj_222222的博客 6832

Windows10完美驱动Apple Studio Display:从雷电接口到亮度调节全攻略

本文详细介绍了如何在Windows10系统上完美驱动Apple Studio Display,涵盖雷电接口兼容性、亮度调节及色彩管理等关键问题。通过实测对比不同转接方案和显卡兼容性,推荐使用贝尔金VR线和NVIDIA GTX-1660显卡,并提供了BootCamp驱动安装和亮度调节的终极解决方案,帮助用户实现最佳显示效果。

elastic6hunter的博客 1119

【实战分享】低成本K型热电偶测温方案:单运放放大与STM32 ADC采集优化

本文详细介绍了低成本K型热电偶测温方案,通过单运放放大与STM32 ADC采集优化,解决了信号微弱、负电压处理和冷端补偿等核心挑战。方案采用LMV358运放和T型网络降低噪声,结合STM32的ADC校准和软件滤波,实现±0.5℃精度,物料成本控制在15元以内,适用于工业测温场景。

weixin_30839881的博客 167

关于python 的re.sub用法

许多资料的介绍如下: re.sub   re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格 ' ' 替换成 '-' :  import re    text = "JGood is a handsome boy, he is cool, clever, and so on..."  print re.sub(r'\s+', '-', text)

14万+

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7830

python中re.sub函数

re是正则的表达式,sub是substitute表示替换 re.sub是相对复杂点的替换 参考:https://www.jianshu.com/p/8c1d1a38f9b9

m0_46483236的博客 4万+

保姆级教程:用Wireshark抓包分析10M汽车以太网PLCA轮询机制(附pcap文件)

本文详细介绍了10M汽车以太网PLCA轮询机制的抓包分析与性能优化方法。通过Wireshark实战教程,解析PLCA协议的时分多址特性、总线型拓扑结构及带宽优化策略,帮助工程师提升车内网络的可靠性和实时性。附赠pcap文件供实践参考。

wdx01234567的博客 239

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1071

写代码python用什么笔记本,笔记本python怎么运行

大家好,今天我们要解答,python对笔记本电脑配置要求 笔记本电脑python怎么运行,现在让我们一起来看看吧!。Source code download: 本文相关源码学 Python 作为你的编程启蒙之选,无疑是明智的决定。但随之而来的问题是,你需要一台怎样的笔记本电脑来支撑你的学习旅程呢?Python 作为一门强大而多才多艺的编程语言,对电脑的性能要求相对较低,这使得它成为编程新手的理想之选python简单代码。不过,尽管如此,你仍然需要一个合适的笔记本电脑,以确保学习过程流畅无阻。

ab524100的博客 1839

【AI产品与商业航图】Flux.1 完全开源 AI 绘图模型:本地部署与 ComfyUI 实战指南

Flux.1是一个开源项目,用户可以自由使用和修改,完全免除使用费用。🖥️本地部署支持:与一些依赖云端计算的工具不同,Flux.1支持本地部署,确保用户可以离线使用并自主控制数据隐私。🔄兼容ComfyUI框架:Flux.1可以无缝集成到ComfyUI中,用户可以享受更加简便和直观的操作界面。🎨卓越的图像生成能力:Flux.1能够生成高质量、细腻的图像,支持多种风格与创作主题的切换。💾低硬件要求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1736

Python中sub()用法

Python来进行查询和替换一个文本字符串? 可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0]) replacement是被替换成的文本 string是需要被替换的文本 count是一个可选参数,指最大被替换的数量 例子: import re p = re.compile(’(blue|white|red...

围城客的专栏 4万+

YOLOv11低照度增强主干网络PE-YOLO:原理与完整实现教程

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 724

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python中sub的用法_python 正则表达式篇 - sub 用法

python 正则表达式篇 - sub 用法代码#!/usr/bin/env Python3# -*- coding: utf-8 -*-# @Software: PyCharm# @virtualenv:workon# @contact: contact information# @Desc:sub__author__ = '未昔/AngelFate'__date__ = '2019/8/23 ...

weixin_39531178的博客 3669

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python中sub的用法_Python Pandas Series.sub()用法及代码示例

Python是进行数据分析的一种出色语言,主要是因为以数据为中心的Python软件包具有奇妙的生态系统。 Pandas是其中的一种,使导入和分析数据更加容易。Python Series.sub()用于从调用者序列中减去序列或列出长度相同的类似对象。用法:Series.sub(other, level=None, fill_value=None, axis=0)参数:other:要从调用者系列中减去...

weixin_39689700的博客 2965

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

笔记本python运行按哪个键,笔记本电脑怎么用python

你想开始学习如何编程吗?计算机编程令人望而生畏,你可能认为需要通过上课来学习。虽然对于某些语言来说可能是这样,但是有很多编程语言只需一到两天的时间就可以掌握基础知识python用turtle画简单树形图。Python[1] 就是这样的一种语言。你在几分钟内就可以正常运行一个基本的Python程序。参见下面的步骤了解详情。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

yuuuuuuuu77的博客 1005

python编程用什么笔记本好,python用什么笔记本电脑

大家好,本文将围绕写python大家都用什么笔记本的展开说明,python编程用什么笔记本好是一个很多人都想弄明白的事情,想搞清楚python用什么笔记本电脑需要先了解以下几个事情。学 Python 作为你的编程启蒙之选,无疑是明智的决定。但随之而来的问题是,你需要一台怎样的笔记本电脑来支撑你的学习旅程呢?Python 作为一门强大而多才多艺的编程语言,对电脑的性能要求相对较低,这使得它成为编程新手的理想之选。不过,尽管如此,你仍然需要一个合适的笔记本电脑,以确保学习过程流畅无阻。

Fixf4556的博客 1287

python实现文本编辑器_Python实现的文本编辑器功能示例

本文实例讲述了Python实现的文本编辑器功能。分享给大家供大家参考,具体如下:wxpython实现的文本编辑器 效果如下:主要功能:1.编辑保存文本,打开修改文本2.常用快捷键,复制,粘贴,全选等3.支持撤销功能4.支持弹出式菜单代码如下:#encoding=utf-8import wximport osclass MyFrame(wx.Frame):def __init__(self):sel...

weixin_31614747的博客 3474

python的ind_相当于Python中的MATLAB ind2sub

Matlab has two functions for converting matrix subscripts to linear indices and vice versa. (ind2sub and sub2ind)I found the equivalent for R but is there an equivalent way in Python?解决方案From what I c...

weixin_39916520的博客 1077

写代码python用什么笔记本,python编程用什么笔记本

IDE大多数本身就是“重量级”的软件,还有很多插件,这本身就会对性能有一些要求,再加上如果你要编译大型项目,那其实对性能还是有较高的要求,好的电脑10s就整个项目编译完了,差的可能1min还不够,IDE太卡显然是会影响体验、影响心情的,最终影响的是开发效率。双开eclipse和idea,微信,QQ,邮件客户端,editplus,数据库客户端,若干chrome和火狐,基本上8G就耗光了。看你工作性质了,如果单纯写代码对电池续航基本是没任何需求的,只要有电池就行,防止突然停电时你的电脑不会意外关机导致丢数据。

wenangou6 1080

python的ind_MATLAB中的ind2sub相当于Python

谷歌搜索引导我到这个链接:https://github.com/jjakeman/pyheat/blob/master/utilities/math_utils.py据我所知,在MATLAB中没有直接实现这些功能.事实证明我无法正确阅读文档.如果你想要sub2ind的功能,你需要ravel_multi_index功能.函数声明表明您需要两个输入.第一个输入是2D numpy数组,其中每一行是特定维...

weixin_39775354的博客 1506

python sub函数用法_Python Pandas dataframe.sub()用法及代码示例

Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统。 Pandas是其中的一种,使导入和分析数据更加容易。Pandas dataframe.sub()函数用于查找数据帧和其他逐元素的减法。此功能与执行dataframe - other但支持替换其中一个输入中的丢失数据。用法:DataFrame.sub(other, axis=’columns’,...

weixin_39854730的博客 4261

python re.sub用法_re.sub用法

re.sub功能是对于一个输入的字符串,利用正则表达式,来实现字符串替换处理的功能返回处理后的字符串re.sub共有五个参数三个必选参数pattern,repl,string两个可选参数count,flagspattern,表示正则中的模式字符串反斜杠加数字(\n)表示对应匹配的也就是用之前匹配到的字符串补充到这个位置,例如将“hello python,ni hao c,zai jian pyth...

weixin_39869043的博客 1152
上一篇: python正在缓缓向前
下一篇: python tkinter ttk的使用(上)
pythonitstream
博客等级 码龄5年 40粉丝 14原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值