tutorial
This commit is contained in:
parent
d980fdb944
commit
2b71586c04
8 changed files with 880 additions and 17 deletions
100
editor.py
100
editor.py
|
|
@ -1,32 +1,111 @@
|
|||
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.0.255", int(sys.argv[2]))
|
||||
send_addr = ("192.168.1.255", int(sys.argv[2]))
|
||||
|
||||
sock = network.Sock()
|
||||
waiting_for_text = True
|
||||
|
||||
root = tk.Tk()
|
||||
|
||||
area = tk.Text()
|
||||
area.pack()
|
||||
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("<Button-1>", canvas_save_pos)
|
||||
canvas.bind("<B1-Motion>", canvas_move)
|
||||
canvas.bind("<Button-3>", 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
|
||||
if len(old) > len(new):
|
||||
for i in range(len()):
|
||||
pass
|
||||
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 area_input(event):
|
||||
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":"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("<KeyRelease>", on_area_input)
|
||||
area.bind("<B3-Motion>", on_area_input)
|
||||
|
||||
def on_request(r):
|
||||
global waiting_for_text
|
||||
print(r)
|
||||
|
|
@ -41,9 +120,8 @@ def on_request(r):
|
|||
area.replace(c["start"], c["end"], c["text"])
|
||||
elif c["type"] == "get":
|
||||
sock.send({"type":"set", "text":area.get("1.0", "end")}, send_addr)
|
||||
area.insert("1.0", r[1])
|
||||
|
||||
area.bind("<KeyRelease>", area_input)
|
||||
elif c["type"] == "create_line":
|
||||
canvas.create_line(c["x1"], c["y1"], c["x2"], c["y2"])
|
||||
|
||||
sock.listen(listen_addr, on_request)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue