# Version: 0.2
# Author: Miguel Martinez Lopez
# Uncomment the next line to see my email
# print "Author's email: ", "61706c69636163696f6e616d656469646140676d61696c2e636f6d".decode("hex")
import Tkinter as Tk
class DraggableWindow(object):
def __init__(self, disable_draggingd =False, release_command = None):
if disable_draggingd == False:
self.bind('<Button-1>', self.initiate_motion)
self.bind('<ButtonRelease-1>', self.release_dragging)
self.release_command = release_command
def initiate_motion(self, event) :
mouse_x, mouse_y = self.winfo_pointerxy()
self.deltaX = mouse_x - self.winfo_x()
self.deltaY = mouse_y - self.winfo_y()
self.bind('<Motion>', self.drag_window)
def drag_window (self, event) :
mouse_x, mouse_y = self.winfo_pointerxy()
new_x = mouse_x - self.deltaX
new_y = mouse_y - self.deltaY
if new_x < 0 :
new_x = 0
if new_y < 0 :
new_y = 0
self.wm_geometry("+%s+%s" % (new_x, new_y))
def release_dragging(self, event):
self.unbind('<Motion>')
if self.release_command != None :
self.release_command()
def disable_dragging(self) :
self.unbind('<Button-1>')
self.unbind('<ButtonRelease-1>')
self.unbind('<Motion>')
def enable_dragging(self):
self.bind('<Button-1>', self.initiate_motion)
self.bind('<ButtonRelease-1>', self.release_dragging)
class AutoResizedText(Tk.Text):
def __init__(self, *args, **kwargs):
Tk.Text.__init__(self, *args, **kwargs)
self.min_width = kwargs.get('width', 0)
self.min_height = kwargs.get('height', 0)
self.bindtags(('autoresizetext',)+self.bindtags())
self.bind_class("autoresizetext", "<KeyPress>",self.update_textbox)
def update_textbox(self, event):
widget_width = self.min_width
widget_height = max(float(self.index(Tk.END)), self.min_height)
old_text = self.get("1.0", Tk.END)
if event.keysym == 'BackSpace':
self.delete("%s-1c" % Tk.INSERT, Tk.INSERT)
new_text = old_text
if event.keysym == 'Delete':
self.delete("%s+1c" % Tk.INSERT, Tk.INSERT)
new_text = old_text
elif len(event.char) == 1:
if event.keysym == 'Return':
new_char = '\n'
else:
new_char = event.char
new_text = self.insert_character_into_message(old_text, self.index(Tk.INSERT), new_char)
for line in new_text.split("\n"):
if len(line) > widget_width:
widget_width = len(line)+1
self.config(width=widget_width, height=widget_height)
self.update_idletasks()
if event.keysym != 'BackSpace' and event.keysym != 'Delete':
self.insert(Tk.INSERT, new_char)
return "break"
else:
# Checking whether the char is a special character or not
# If it is a special character we don't break the binding chain
if len(event.char) == 1:
return "break"
def insert_character_into_message(self,message, coordinate, char):
target_row, target_column = map( int, coordinate.split('.'))
this_row = 1
this_column = 0
index = 0
for ch in message:
if this_row == target_row and this_column == target_column:
message = message[:index] +char + message[index:]
return message
index += 1
if ch == '\n':
this_row += 1
this_column = 0
else:
this_column += 1
class DesktopNote(Tk.Toplevel, DraggableWindow):
BG_NOTE = '#%02x%02x%02x' % (255, 255, 125)
def __init__(self, parent, title='Without title', min_width =10, min_height = 3):
Tk.Toplevel.__init__(self, parent)
DraggableWindow.__init__(self)
self.overrideredirect(True)
self.close_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAImDI6ZFu3/DpxO0mlvBLFX7oEfJo5QZlZNaZTupp2shsY13So6VwAAOw==")
self.minimize_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAIiDI6ZFu3/DpxO0mlvBBrmbnBg83Wldl6ZgoljSsFYqNRcAQA7")
self.restore_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAhFAP8FGEiwYEGB/xIqXLhwIMOHCh02NBgxAEODFhNKjNiwYsWDGQWGxIhQ48iJI09ynLhS48WUB1lCfLhxpkebHTHqtBgQADs=")
self.minimizeAtRightSide_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAg+AP8FGEiwYEGB/xIqXLhwIMOHCh1CfChxosSKEC8GmJhQI0eBG0F+9MiRpMWQGCmiDPmxI8uWKUuCNEhzY0AAOw==")
frameNote = Tk.Frame(self, bg=self.BG_NOTE, bd=1, highlightbackground='black',highlightcolor='black',highlightthickness=1)
frameNote.pack()
self.mimizedNote = Tk.Label(frameNote, text=title, bg=self.BG_NOTE, wraplength=1)
self.mimizedNote.bind('<Button-1>', lambda event: self.maximize_from_right_side())
self.maximizedNote = Tk.Frame(frameNote)
self.maximizedNote.pack()
Header = Tk.Frame(self.maximizedNote, bg=self.BG_NOTE)
Header.pack(fill=Tk.X)
HR = Tk.Frame(self.maximizedNote,bg='black', height=1)
HR.pack(padx=1, fill=Tk.X)
titleLabel = Tk.Label(Header, text = title, bg=self.BG_NOTE)
titleLabel.pack(side=Tk.LEFT)
Tk.Button(Header, compound=Tk.TOP, image=self.close_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.destroy).pack(side=Tk.RIGHT)
self.iconifyButton = Tk.Button(Header, image=self.minimize_IMG, command=self.minimize, bg=self.BG_NOTE, activebackground=self.BG_NOTE)
self.iconifyButton.pack(side=Tk.RIGHT)
Tk.Button(Header, compound=Tk.TOP, image=self.minimizeAtRightSide_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.minimize_at_right_side).pack(side=Tk.RIGHT)
self.text_box = AutoResizedText(self.maximizedNote, bd=0, bg=self.BG_NOTE, width=min_width, height=min_height)
self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
def minimize_at_right_side(self):
self.disable_dragging()
self.maximizedNote.pack_forget()
self.mimizedNote.pack()
self.x = self.winfo_x()
self.y = self.winfo_y()
self.wm_geometry('-0+%d'%self.y)
def maximize_from_right_side(self):
self.maximizedNote.pack()
self.mimizedNote.pack_forget()
self.wm_geometry('+%d+%d'% (self.x,self.y))
self.enable_dragging()
def minimize(self):
self.text_box.pack_forget()
self.iconifyButton['command'] = self.maximize
self.iconifyButton['image'] = self.restore_IMG
def maximize(self):
self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
self.iconifyButton['command'] = self.minimize
self.iconifyButton['image'] = self.minimize_IMG
class Test(Tk.Tk):
def __init__(self):
self.root = Tk.Tk()
Tk.Label(self.root,text="Title:").pack(side=Tk.LEFT)
self.title = Tk.StringVar()
self.title.set('TITLE')
entry_title = Tk.Entry(self.root, textvariable=self.title)
entry_title.pack(side=Tk.LEFT)
entry_title.bind('<Return>', lambda event: self.create_note() )
Tk.Button(self.root, text="Create another note", command=self.create_note).pack(side=Tk.LEFT)
self.create_note()
def create_note(self):
New_note = DesktopNote(self.root, self.title.get())
New_note.text_box.focus()
def run(self):
self.root.mainloop()
if __name__ == '__main__':
Test().run()
Diff to Previous Revision
--- revision 4 2014-06-03 23:28:46
+++ revision 5 2014-06-04 19:03:07
@@ -1,4 +1,4 @@
-# Version: 0.1
+# Version: 0.2
# Author: Miguel Martinez Lopez
# Uncomment the next line to see my email
# print "Author's email: ", "61706c69636163696f6e616d656469646140676d61696c2e636f6d".decode("hex")
@@ -8,14 +8,14 @@
class DraggableWindow(object):
- def __init__(self, disabled =False, release_command = None):
- if disabled == False:
+ def __init__(self, disable_draggingd =False, release_command = None):
+ if disable_draggingd == False:
self.bind('<Button-1>', self.initiate_motion)
self.bind('<ButtonRelease-1>', self.release_dragging)
self.release_command = release_command
-
-
+
+
def initiate_motion(self, event) :
mouse_x, mouse_y = self.winfo_pointerxy()
@@ -24,7 +24,7 @@
self.bind('<Motion>', self.drag_window)
-
+
def drag_window (self, event) :
mouse_x, mouse_y = self.winfo_pointerxy()
@@ -41,120 +41,179 @@
def release_dragging(self, event):
self.unbind('<Motion>')
-
+
if self.release_command != None :
self.release_command()
- def disable(self) :
+ def disable_dragging(self) :
self.unbind('<Button-1>')
self.unbind('<ButtonRelease-1>')
self.unbind('<Motion>')
-
- def enable(self):
+
+ def enable_dragging(self):
self.bind('<Button-1>', self.initiate_motion)
- self.bind('<ButtonRelease-1>', self.release_dragging)
-
+ self.bind('<ButtonRelease-1>', self.release_dragging)
+
+
+class AutoResizedText(Tk.Text):
+ def __init__(self, *args, **kwargs):
+ Tk.Text.__init__(self, *args, **kwargs)
+
+ self.min_width = kwargs.get('width', 0)
+ self.min_height = kwargs.get('height', 0)
+
+ self.bindtags(('autoresizetext',)+self.bindtags())
+ self.bind_class("autoresizetext", "<KeyPress>",self.update_textbox)
+
+ def update_textbox(self, event):
+ widget_width = self.min_width
+ widget_height = max(float(self.index(Tk.END)), self.min_height)
+
+ old_text = self.get("1.0", Tk.END)
+
+ if event.keysym == 'BackSpace':
+ self.delete("%s-1c" % Tk.INSERT, Tk.INSERT)
+ new_text = old_text
+ if event.keysym == 'Delete':
+ self.delete("%s+1c" % Tk.INSERT, Tk.INSERT)
+ new_text = old_text
+ elif len(event.char) == 1:
+ if event.keysym == 'Return':
+ new_char = '\n'
+ else:
+ new_char = event.char
+
+ new_text = self.insert_character_into_message(old_text, self.index(Tk.INSERT), new_char)
+
+ for line in new_text.split("\n"):
+ if len(line) > widget_width:
+ widget_width = len(line)+1
+
+ self.config(width=widget_width, height=widget_height)
+ self.update_idletasks()
+
+ if event.keysym != 'BackSpace' and event.keysym != 'Delete':
+ self.insert(Tk.INSERT, new_char)
+ return "break"
+ else:
+ # Checking whether the char is a special character or not
+ # If it is a special character we don't break the binding chain
+ if len(event.char) == 1:
+ return "break"
+
+ def insert_character_into_message(self,message, coordinate, char):
+ target_row, target_column = map( int, coordinate.split('.'))
+
+ this_row = 1
+ this_column = 0
+ index = 0
+
+ for ch in message:
+ if this_row == target_row and this_column == target_column:
+ message = message[:index] +char + message[index:]
+ return message
+
+ index += 1
+
+ if ch == '\n':
+ this_row += 1
+ this_column = 0
+ else:
+ this_column += 1
class DesktopNote(Tk.Toplevel, DraggableWindow):
BG_NOTE = '#%02x%02x%02x' % (255, 255, 125)
-
+
def __init__(self, parent, title='Without title', min_width =10, min_height = 3):
- self.min_width = min_width
- self.min_height = min_height
-
Tk.Toplevel.__init__(self, parent)
DraggableWindow.__init__(self)
-
+
self.overrideredirect(True)
+
+ self.close_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAImDI6ZFu3/DpxO0mlvBLFX7oEfJo5QZlZNaZTupp2shsY13So6VwAAOw==")
+ self.minimize_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAIiDI6ZFu3/DpxO0mlvBBrmbnBg83Wldl6ZgoljSsFYqNRcAQA7")
+ self.restore_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAhFAP8FGEiwYEGB/xIqXLhwIMOHCh02NBgxAEODFhNKjNiwYsWDGQWGxIhQ48iJI09ynLhS48WUB1lCfLhxpkebHTHqtBgQADs=")
+ self.minimizeAtRightSide_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAg+AP8FGEiwYEGB/xIqXLhwIMOHCh1CfChxosSKEC8GmJhQI0eBG0F+9MiRpMWQGCmiDPmxI8uWKUuCNEhzY0AAOw==")
frameNote = Tk.Frame(self, bg=self.BG_NOTE, bd=1, highlightbackground='black',highlightcolor='black',highlightthickness=1)
frameNote.pack()
self.mimizedNote = Tk.Label(frameNote, text=title, bg=self.BG_NOTE, wraplength=1)
- self.mimizedNote.bind('<Button-1>', lambda event: self.side_maximize())
-
-
+ self.mimizedNote.bind('<Button-1>', lambda event: self.maximize_from_right_side())
+
self.maximizedNote = Tk.Frame(frameNote)
self.maximizedNote.pack()
-
+
Header = Tk.Frame(self.maximizedNote, bg=self.BG_NOTE)
Header.pack(fill=Tk.X)
HR = Tk.Frame(self.maximizedNote,bg='black', height=1)
HR.pack(padx=1, fill=Tk.X)
+
titleLabel = Tk.Label(Header, text = title, bg=self.BG_NOTE)
titleLabel.pack(side=Tk.LEFT)
- self.noteclos = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAImDI6ZFu3/DpxO0mlvBLFX7oEfJo5QZlZNaZTupp2shsY13So6VwAAOw==")
- Tk.Button(Header, compound=Tk.TOP, image=self.noteclos, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.destroy).pack(side=Tk.RIGHT)
- self.notemini = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAIiDI6ZFu3/DpxO0mlvBBrmbnBg83Wldl6ZgoljSsFYqNRcAQA7")
- self.iconifyButton = Tk.Button(Header, image=self.notemini, command=self.minimize, bg=self.BG_NOTE, activebackground=self.BG_NOTE)
+
+ Tk.Button(Header, compound=Tk.TOP, image=self.close_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.destroy).pack(side=Tk.RIGHT)
+
+ self.iconifyButton = Tk.Button(Header, image=self.minimize_IMG, command=self.minimize, bg=self.BG_NOTE, activebackground=self.BG_NOTE)
self.iconifyButton.pack(side=Tk.RIGHT)
- self.minright = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAg+AP8FGEiwYEGB/xIqXLhwIMOHCh1CfChxosSKEC8GmJhQI0eBG0F+9MiRpMWQGCmiDPmxI8uWKUuCNEhzY0AAOw==")
- Tk.Button(Header, compound=Tk.TOP, image=self.minright, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.side_minimize).pack(side=Tk.RIGHT)
-
- self.text_box = Tk.Text(self.maximizedNote, bd=0, bg=self.BG_NOTE, width=self.min_width, height=self.min_height)
+
+ Tk.Button(Header, compound=Tk.TOP, image=self.minimizeAtRightSide_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.minimize_at_right_side).pack(side=Tk.RIGHT)
+
+ self.text_box = AutoResizedText(self.maximizedNote, bd=0, bg=self.BG_NOTE, width=min_width, height=min_height)
self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
- self.text_box.bind("<Key>", self.update_textbox)
-
- self.noterest = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAhFAP8FGEiwYEGB/xIqXLhwIMOHCh02NBgxAEODFhNKjNiwYsWDGQWGxIhQ48iJI09ynLhS48WUB1lCfLhxpkebHTHqtBgQADs=")
-
- def side_minimize(self):
- self.disable()
+
+
+ def minimize_at_right_side(self):
+ self.disable_dragging()
self.maximizedNote.pack_forget()
self.mimizedNote.pack()
+
self.x = self.winfo_x()
self.y = self.winfo_y()
+
self.wm_geometry('-0+%d'%self.y)
-
- def side_maximize(self):
+
+ def maximize_from_right_side(self):
self.maximizedNote.pack()
self.mimizedNote.pack_forget()
self.wm_geometry('+%d+%d'% (self.x,self.y))
- self.enable()
-
+ self.enable_dragging()
+
def minimize(self):
self.text_box.pack_forget()
self.iconifyButton['command'] = self.maximize
- self.iconifyButton['image'] = self.noterest
-
+ self.iconifyButton['image'] = self.restore_IMG
+
def maximize(self):
self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
self.iconifyButton['command'] = self.minimize
- self.iconifyButton['image'] = self.notemini
-
- def update_textbox(self, event):
- widget_width = 0
- widget_height = float(event.widget.index(Tk.END))
- for line in event.widget.get("1.0", Tk.END).split("\n"):
- if len(line) > widget_width:
- widget_width = len(line)+1
- widget_width = max(widget_width,self.min_width)
- widget_height = max(widget_height,self.min_height)
- event.widget.config(width=widget_width, height=widget_height)
-
+ self.iconifyButton['image'] = self.minimize_IMG
+
+
class Test(Tk.Tk):
def __init__(self):
self.root = Tk.Tk()
Tk.Label(self.root,text="Title:").pack(side=Tk.LEFT)
-
+
self.title = Tk.StringVar()
self.title.set('TITLE')
-
+
entry_title = Tk.Entry(self.root, textvariable=self.title)
entry_title.pack(side=Tk.LEFT)
- entry_title.bind('<Return>', lambda event: self.create_note() )
-
+ entry_title.bind('<Return>', lambda event: self.create_note() )
+
Tk.Button(self.root, text="Create another note", command=self.create_note).pack(side=Tk.LEFT)
-
+
self.create_note()
-
+
def create_note(self):
New_note = DesktopNote(self.root, self.title.get())
New_note.text_box.focus()
-
+
def run(self):
self.root.mainloop()