import network import tkinter as tk from tkinter import ttk, filedialog, colorchooser import sys listen_addr = ("0.0.0.0", int(sys.argv[1])) send_addr = ("192.168.1.255", int(sys.argv[2])) sock = network.Sock() waiting_for_text = True root = tk.Tk() def foo(): print("foo") root.option_add('*tearOff', False) menubar = tk.Menu(root) root['menu'] = menubar menu_file = tk.Menu(menubar) menu_edit = tk.Menu(menubar) menubar.add_cascade(menu=menu_file, label='File') menubar.add_cascade(menu=menu_edit, label='Edit') menu_file.add_command(label='New', command=foo) area = tk.Text(root) area.grid(column=0, row=1, sticky=(tk.N, tk.S, tk.E, tk.W)) area_scrolly = ttk.Scrollbar(root, orient=tk.VERTICAL, command=area.yview) area_scrolly.grid(column=1, row=1, sticky=(tk.N, tk.S, tk.E, tk.W)) area.configure(yscrollcommand=area_scrolly.set) canvas = tk.Canvas(root, background='white') canvas.grid(column=2, row=1, sticky=(tk.N, tk.S, tk.E, tk.W)) canvas_last_x = 0 canvas_last_y = 0 def canvas_save_pos(event): global canvas_last_x, canvas_last_y canvas_last_x = event.x canvas_last_y = event.y def canvas_move(event): canvas.create_line(canvas_last_x, canvas_last_y, event.x, event.y) sock.send({"type":"create_line", "x1":canvas_last_x, "y1":canvas_last_y, "x2":event.x, "y2":event.y}, send_addr) canvas_save_pos(event) def canvas_click(event): print(colorchooser.askcolor(initialcolor='black')) canvas.bind("", canvas_save_pos) canvas.bind("", canvas_move) canvas.bind("", canvas_click) root.rowconfigure(1, weight=1) root.columnconfigure(0, weight=1) root.columnconfigure(2, weight=1) def on_save_bt(): path = tk.filedialog.asksaveasfilename(filetypes=[("Fichier texte", ".txt")]) file = open(path, "w") file.write(area.get("1.0", "end")) toolbar = ttk.Frame(root) toolbar.grid(column=0, row=0, columnspan=2, sticky=(tk.N, tk.S, tk.E, tk.W)) save_bt = ttk.Button(toolbar, text="Enregistrer", command=on_save_bt) save_bt.grid(column=0, row=0, sticky=(tk.W)) open_bt = ttk.Button(toolbar, text="Ouvrir") open_bt.grid(column=1, row=0, sticky=(tk.W)) def diff(old, new): index = 0 line = 1 char = 0 for i in range(min(len(old), len(new))): if old[i] != new[i]: return { "type": "replace", "start": str(line)+"."+str(char), "end": 0, "text": new[i:i+abs(len(old)-len(new))] } char += 1 if old[i] == "\n": line += 1 char = 0 return { "type": "insert", "start": "end", "text": new[i:i+abs(len(old)-len(new))] } def on_area_input(event): #print(area.get("1.0", "end")) print(event) #sock.send({"type":"insert", "start":"1.0", "text":area.get("1.0", "end")}, send_addr) sock.send({"type":"replace", "start":"1.0", "end":"end", "text":area.get("1.0", "end")}, send_addr) #if event.keycode == 25: # area.mark_set("insert", "1.0") area.bind("", on_area_input) area.bind("", on_area_input) def on_request(r): global waiting_for_text print(r) c, a = r if c["type"] == "set": if waiting_for_text: area.replace("1.0", "end", c["text"]) waiting_for_text = False elif c["type"] == "insert": area.insert(c["start"], c["text"]) elif c["type"] == "replace": area.replace(c["start"], c["end"], c["text"]) elif c["type"] == "get": sock.send({"type":"set", "text":area.get("1.0", "end")}, send_addr) elif c["type"] == "create_line": canvas.create_line(c["x1"], c["y1"], c["x2"], c["y2"]) sock.listen(listen_addr, on_request) sock.send({"type":"get"}, send_addr) root.mainloop()