Словарь Python ничего не отображать - PullRequest
0 голосов
/ 27 июня 2018

Я загружаю словарь Python несколькими полигонами. Точки многоугольника получаются при щелчке мышью в разных местах изображения. Скрипт отображает изображение для пользователя для выбора различных точек многоугольников. Пользователь щелкнет правой кнопкой мыши в другом положении. Когда пользователь нажимает левую кнопку мыши, создается многоугольник и добавляется в словарь Dict_Polygons с меткой. Список list_of_points очищается, так как новые точки для нового многоугольника будут добавлены в этот список. Проблема в том, что Dict_Polygon не загружается с элементами. Вот полный код.

import math
import pickle
from Tkinter import *
import Image, ImageTk, ImageDraw
import numpy as np

coord=[]  # for saving coord of each click position
Dict_Polygon={}   # Dictionary for saving polygon
list_of_points=[]
flag=True
label=0

def draw_lines(event):
    mouse_xy = (event.x, event.y)
    func_Draw_lines(mouse_xy)

def func_Draw_lines(mouse_xy):
    func_Draw_Dot(mouse_xy)
    center_x, center_y = mouse_xy
    if canvas.old_coords:
            x1, y1 = canvas.old_coords
            canvas.create_line(center_x, center_y, x1, y1)

    # add clicked positions to list
    if flag==True:
        list_of_points.append(mouse_xy)
        canvas.old_coords = center_x, center_y

def func_Draw_Dot(coord):
     x_coord, y_coord=coord
  #draw dot over position which is clicked
     x1, y1 = (x_coord - 1), (y_coord - 1)
     x2, y2 = (x_coord + 1), (y_coord + 1)
     canvas.create_oval(x1, y1, x2, y2, fill='green', outline='green', width=5)

# This function will be called when the user wants to specify class, so a polygon will be drawn. 
def func_draw_polygon(event):

    numberofPoint=len(list_of_points)
    if numberofPoint>2:
        print ("test")
        canvas.create_polygon(list_of_points, fill='', outline='green', width=2)
        Dict_Polygon[label]=list_of_points
        list_of_points[:]=[]
       # del list_of_points[:] # clear list elements to add new polygon points
        canvas.old_coords=None
        global label
        label=label+1

        print (Dict_Polygon.items())
    else:
        print('Select minemum 3 points')

# Main function
if __name__ == '__main__':

    root = Tk()
    # Input image
    img = Image.open("e.png")         

# Draw canvas for iput image to pop up image for clicks
    filename = ImageTk.PhotoImage(img)
    canvas = Canvas(root,height=img.size[0],width=img.size[0])
    canvas.image = filename
    canvas.create_image(0,0,anchor='nw',image=filename)
    canvas.pack()
    canvas.old_coords = None
# bind function to canvas to generate event
    canvas.bind("<Button 3>", draw_lines)
    canvas.bind("<Button 1>", func_draw_polygon)

    root.mainloop()

1 Ответ

0 голосов
/ 27 июня 2018

Проблема с кодом: «Я добавил list_of_points в словарь, а затем удалил все элементы в этом списке. Таким образом, пустой словарь является выходным. Чтобы справиться с копированием списка в словарь, я следую этому решению

import copy
new_list = copy.copy(old_list)
...