Advertisement
Guest User

Untitled

a guest
Dec 7th, 2023
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.39 KB | None | 0 0
  1. import tkinter as tk
  2. import json
  3.  
  4. # (Node osztály módosítása)
  5.  
  6. class Node:
  7.     def __init__(self, name, x, y):
  8.         self.name = name
  9.         self.value = None
  10.         self.connections = []
  11.         self.operation = None
  12.         self.x = x
  13.         self.y = y
  14.         self.handle_x = x  # Handle x-koordinátája, kezdetben megegyezik a node x-koordinátájával
  15.         self.handle_y = y  # Handle y-koordinátája, kezdetben megegyezik a node y-koordinátájával
  16.  
  17.     # További metódusok és attribútumok...
  18.  
  19.  
  20.     def set_value(self, value):
  21.         self.value = value
  22.  
  23.     def add_connection(self, node):
  24.         self.connections.append(node)
  25.  
  26.     def set_operation(self, operation):
  27.         self.operation = operation
  28.     def create_connection(self, node1, node2):
  29.         node1.add_connection(node2)
  30.         node2.add_connection(node1)
  31.  
  32.  
  33.  
  34. class NodeGUI:
  35.     node_count = 1  # Globális változó az egyedi azonosításhoz
  36.     def __init__(self, root):
  37.         self.root = root
  38.         self.nodes = []
  39.         self.selected_node = None
  40.         self.line = None
  41.         self.canvas = tk.Canvas(self.root, width=500, height=500, bg="white")
  42.         self.canvas.pack()
  43.  
  44.         self.node_name_entry = tk.Entry(self.root)
  45.         self.node_value_entry = tk.Entry(self.root)
  46.         self.operation_dropdown = tk.StringVar(self.root)
  47.         self.operation_dropdown.set("Válasszon műveletet")
  48.         self.operation_dropdown_menu = tk.OptionMenu(self.root, self.operation_dropdown, "add", "multiply")
  49.         self.create_node_button = tk.Button(self.root, text="Új Node létrehozása", command=self.create_node)
  50.         self.save_button = tk.Button(self.root, text="Terv mentése", command=self.save_plan)
  51.         self.load_button = tk.Button(self.root, text="Terv betöltése", command=self.load_plan)
  52.  
  53.         self.node_name_entry.pack()
  54.         self.node_value_entry.pack()
  55.         self.operation_dropdown_menu.pack()
  56.         self.create_node_button.pack()
  57.         self.save_button.pack()
  58.         self.load_button.pack()
  59.  
  60.         self.drag_data = {"x": 0, "y": 0, "item": None}
  61.  
  62.         self.canvas.bind("<ButtonPress-1>", self.on_click)
  63.         self.canvas.bind("<B1-Motion>", self.on_drag)
  64.         self.canvas.bind("<ButtonRelease-1>", self.on_release)
  65.  
  66.  
  67.     # (Node és NodeGUI osztályok maradnak, csak a create_node függvény lesz módosítva)
  68.     # Egér görgő események hozzáadása
  69.         self.canvas.bind("<MouseWheel>", self.zoom)
  70.  
  71.     def zoom(self, event):
  72.         scale = 1.1  # Nagyítás és kicsinyítés mértéke
  73.         if event.delta > 0:  # Görgő felfelé mozgatása (nagyítás)
  74.             self.canvas.scale("all", event.x, event.y, scale, scale)
  75.         elif event.delta < 0:  # Görgő lefelé mozgatása (kicsinyítés)
  76.             self.canvas.scale("all", event.x, event.y, 1 / scale, 1 / scale)
  77.  
  78.     def save_plan(self):
  79.        
  80.         pass
  81.    
  82.     def load_plan(self):
  83.         pass
  84.    
  85.     def connect_nodes(self, event, node):
  86.         pass
  87.    
  88.  
  89.     def create_node(self):
  90.         name = self.node_name_entry.get()
  91.         value = int(self.node_value_entry.get()) if self.node_value_entry.get() else None
  92.         operation = self.operation_dropdown.get()
  93.  
  94.         new_node = Node(name, 50 + len(self.nodes) * 100, 50)  # A NODE-ot a felhasználó által megadott névvel hozzuk létre
  95.         new_node.set_value(value)
  96.         new_node.set_operation(operation)
  97.  
  98.         self.nodes.append(new_node)
  99.         self.draw_nodes()
  100.        
  101.     def draw_nodes(self):
  102.         self.canvas.delete("all")
  103.  
  104.         for node in self.nodes:
  105.             rect_width = 100
  106.             rect_height = 50
  107.             node_rect = self.canvas.create_rectangle(
  108.                 node.x - rect_width // 2, node.y - rect_height // 2,
  109.                 node.x + rect_width // 2, node.y + rect_height // 2, fill="lightblue"
  110.             )
  111.             text_id = self.canvas.create_text(node.x, node.y - rect_height // 4, text=node.name)
  112.             value_text = f"Value: {node.value}" if node.value is not None else "Value: None"
  113.             value_id = self.canvas.create_text(node.x, node.y + rect_height // 4, text=value_text)
  114.             self.canvas.tag_bind(node_rect, "<Button-1>", lambda event, node=node: self.select_node(event, node))
  115.  
  116.            # A kijelölt rész követi a node-ot
  117.             handle_rect = self.canvas.create_rectangle(
  118.                 node.x - 10, node.y - 10, node.x + 10, node.y + 10, fill="red"
  119.             )
  120.             self.canvas.tag_bind(handle_rect, "<Button-1>", lambda event, node=node: self.connect_nodes(event, node))
  121.  
  122.         # Vonalkapcsolatok minden egyes node-hoz
  123.         for node in self.nodes:
  124.             for connection in node.connections:
  125.                 self.canvas.create_line(
  126.                     node.x, node.y, connection.x, connection.y, fill="black"
  127.                 )
  128.             if self.selected_node:
  129.               for connection in self.selected_node.connections:
  130.                 self.canvas.create_line(
  131.                     self.selected_node.handle_x, self.selected_node.handle_y,
  132.                     connection.handle_x, connection.handle_y,
  133.                     fill="black"
  134.                     )
  135.  
  136.     def on_drag(self, event):
  137.      if self.selected_node is not None:
  138.         for connection in self.selected_node.connections:
  139.             # Ezt a részt csak akkor futtasd le, ha van kiválasztott node
  140.             if self.drag_data["item"]:
  141.                 node = self.drag_data["item"]
  142.                 node.x += event.x - self.drag_data["x"]
  143.                 node.y += event.y - self.drag_data["y"]
  144.                 self.drag_data["x"] = event.x
  145.                 self.drag_data["y"] = event.y
  146.                 self.draw_nodes()
  147.             if (node.handle_x - 10 < event.x < node.handle_x + 10) and \
  148.                 (node.handle_y - 10 < event.y < node.handle_y + 10):
  149.                     # A vonal húzásának folyamata a kijelölt részre kattintáskor
  150.                 for connection in self.selected_node.connections:
  151.                     pass
  152.  
  153.             for connection in self.selected_node.connections:
  154.                 # A vonalak új koordinátáinak beállítása
  155.                 self.canvas.coords(connection.line, self.selected_node.x, self.selected_node.y, connection.x, connection.y)
  156.                 self.selected_node.x = event.x
  157.                 self.selected_node.y = event.y
  158.      else:
  159.         print("Nem választott ki NODE-ot.")
  160.  
  161.     def on_click(self, event):
  162.         rect_width = 100
  163.         rect_height = 50
  164.  
  165.         for node in self.nodes:
  166.             if (node.x - rect_width // 2 < event.x < node.x + rect_width // 2) and \
  167.                (node.y - rect_height // 2 < event.y < node.y + rect_height // 2):
  168.                 if (node.handle_x - 10 < event.x < node.handle_x + 10) and \
  169.                    (node.handle_y - 10 < event.y < node.handle_y + 10):
  170.                     self.selected_node = node
  171.                     self.drag_data["item"] = node
  172.                     self.drag_data["x"] = event.x
  173.                     self.drag_data["y"] = event.y
  174.                     break
  175.                 else:
  176.                     self.selected_node = node
  177.                     self.drag_data["item"] = node
  178.                     self.drag_data["x"] = event.x
  179.                     self.drag_data["y"] = event.y
  180.                     break
  181.  
  182.     def on_release(self, event):
  183.         if self.selected_node:
  184.             for node in self.nodes:
  185.                 if (node.x - 50 < event.x < node.x + 50) and (node.y - 25 < event.y < node.y + 25) and node != self.selected_node:
  186.                     if self.line:
  187.                         self.canvas.delete(self.line)
  188.                     self.line = self.canvas.create_line(node.x, node.y, self.selected_node.x, self.selected_node.y)
  189.                     node.add_connection(self.selected_node)
  190.                     self.selected_node.add_connection(node)
  191.             self.selected_node = None
  192.             self.drag_data["item"] = None
  193.  
  194.    
  195.  
  196.     def save_plan(self):
  197.         data = {
  198.             "nodes": [{
  199.                 "name": node.name,
  200.                 "x": node.x,
  201.                 "y": node.y,
  202.                 "value": node.value,
  203.                 "operation": node.operation,
  204.                 "connections": [self.nodes.index(connection) for connection in node.connections]
  205.             } for node in self.nodes]
  206.         }
  207.         with open("node_plan.json", "w") as file:
  208.             json.dump(data, file)
  209.         print("Terv elmentve")
  210.  
  211.     def load_plan(self):
  212.         try:
  213.             with open("node_plan.json", "r") as file:
  214.                 data = json.load(file)
  215.                 self.nodes = []
  216.                 for node_data in data["nodes"]:
  217.                     new_node = Node(node_data["name"], node_data["x"], node_data["y"])
  218.                     new_node.set_value(node_data["value"])
  219.                     new_node.set_operation(node_data["operation"])
  220.                     connections = [self.nodes[index] for index in node_data["connections"]]
  221.                     new_node.connections = connections
  222.                     self.nodes.append(new_node)
  223.                 self.draw_nodes()
  224.             print("Terv betöltve")
  225.         except FileNotFoundError:
  226.             print("Nincs mentett terv")
  227.  
  228. def main():
  229.     root = tk.Tk()
  230.     root.title("Node Creator")
  231.     node_gui = NodeGUI(root)
  232.     root.mainloop()
  233.  
  234. if __name__ == "__main__":
  235.     main()
  236.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement