通用便签折腾日记
- 技术选型
python , tkinter - 准备工作
安装python环境 - 动手制作
from tkinter import *
class Note(object):
def __init__(self, x=100, y=100):
self.xr = 100
self.yr = 100
self.colorthemes = {"yellow": ["#FFFACD", "#F0E68C"],
"blue": ["#98F5FF", "#00E5EE"],
"red": ["#E9967A", "#EE6363"],
"green": ["#90ee90", "#32CD32"]
}
self.setnote(x, y)
def setnote(self, x, y):
self.root = Tk()
self.root.title('jnote')
self.root.geometry('200x200+{0}+{1}'.format(x, y))
self.root.wm_attributes("-topmost", True)
self.root.overrideredirect(True)
self.themecolor = list(self.colorthemes.values())[0]
self.titleframe = Frame(self.root, bg=self.themecolor[0], bd=0)
self.titleframe.grid(row=0, column=0, sticky='nswe')
self.icon = Label(self.titleframe, text='N', font=('宋体', 14), cursor='fleur', anchor='center',
bg=self.themecolor[0])
self.icon.grid(row=0, column=0, sticky='nswe')
self.icon.bind('<ButtonPress-1>', self.setxy)
self.icon.bind('<B1-Motion>', self.resize)
self.title = Entry(self.titleframe, font=("微软雅黑", 14), bd=0, bg=self.themecolor[0])
self.title.grid(row=0, column=1, sticky='nswe')
self.title.insert(0, 'untitled')
self.sets = Label(self.titleframe, text='…', font=("宋体", 14), anchor='center', bg=self.themecolor[0])
self.sets.grid(row=0, column=3, sticky='nswe')
self.sets.bind('<ButtonRelease-1>', self.postsetsmenu)
self.quit = Label(self.titleframe, text='×', font=("宋体", 14), anchor='center', bg=self.themecolor[0])
self.quit.grid(row=0, column=4, sticky='nswe')
self.quit.bind('<ButtonRelease-1>', self.quitapp)
self.text = Text(self.root, font=(10), bd=0, bg=self.themecolor[0])
self.text.grid(row=1, column=0, sticky='nswe')
self.root.bind_all('<Enter>', self.enter)
self.root.bind_all('<Leave>', self.leave)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_rowconfigure(1, weight=1)
self.titleframe.grid_columnconfigure(1, weight=1)
self.themesvar = IntVar()
self.themesvar.set(0)
self.setsmenu = Menu(self.root, tearoff=False)
self.setsmenu.add_command(label='新建', command=lambda: Note(x=self.root.winfo_x() + self.root.winfo_width() + 10,
y=self.root.winfo_y()))
self.setsmenu.add_cascade(label='保存', command=lambda: self.save(name=self.title.get(), text=self.text.get(1.0,
'end')))
self.setsmenu.add_separator()
self.themesmenu = Menu(self.setsmenu, tearoff=False)
for i in range(len(self.colorthemes.keys())):
self.themesmenu.add_radiobutton(label=list(self.colorthemes.keys())[i], variable=self.themesvar, value=i,
command=self.setcolor)
self.setsmenu.add_cascade(label='颜色主题', menu=self.themesmenu)
self.root.mainloop()
def enter(self, event):
event.widget['bg'] = list(self.colorthemes.values())[self.themesvar.get()][1]
def leave(self, event):
event.widget['bg'] = list(self.colorthemes.values())[self.themesvar.get()][0]
def setxy(self, event):
self.xr = event.x
self.yr = event.y
def resize(self, event):
self.root.geometry(
'+{0}+{1}'.format(self.root.winfo_x() + event.x - self.xr, self.root.winfo_y() + event.y - self.yr))
def setcolor(self):
self.includes = [self.titleframe, self.icon, self.title, self.sets, self.quit, self.text]
for r in self.includes:
r.configure(bg=list(self.colorthemes.values())[self.themesvar.get()][0])
def postsetsmenu(self, event):
self.setsmenu.post(event.x_root, event.y_root)
def save(self, name, text):
with open('notes/{0}.txt'.format(name), 'w') as f:
f.write(text)
def quitapp(self, event):
self.root.destroy()
if __name__ == '__main__':
Note(x=100, y=100)
以上是准备工作
demo来自GitHub,目前不支持历史便签加载,我后续将会完善。