Как я могу поместить изображение на фигуру Matplotlib (встроенную в Tk canvas) с определенной координатой и размером? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь написать программу, которая анализирует двухмерные ферменные конструкции, используя метод конечных элементов.

Мне нужно нарисовать / поместить изображение треугольника в определенных координатах. Программа встроена в холст Tkinter. Вот пример того, что я хочу сделать: Изображение

Итак, как я могу нарисовать или поместить изображение треугольника по этой определенной координате, с определенным размером, используя matplotlib? Я надеюсь, что моя проблема ясна.

Редактировать: я пытался реализовать решение из этой публикации, но теперь я получаю что-то вроде этого: Изображение

Изображение увеличено и не имеет правильной координаты. Вот соответствующий раздел из моего кода:

root = Tk()
frame2 = LabelFrame(root)
frame2.grid(row=1,column=3,padx=50)

x = 0
y= 0

fig = Figure(figsize=(5, 4), dpi=100)
fig.add_subplot(111).plot(x,y)
fig.suptitle(t='Structure')

canvas = FigureCanvasTkAgg(fig, master=frame2)  # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, frame2)
toolbar.update()

applyButton = Button(BCFrame, text='APPLY',font=("Verdana", 20), command = lambda: apply(NodeNoEntry.get(),dirr.get(),bc.get(),magnitudeEntry.get()))
applyButton.grid(row=1, column=4, rowspan=2, padx=20)

def apply(node,direct,bc,mag):
    global fig
    global canvas
    global nodes
    if node == '':
        messagebox.showerror("Boundary Condition Error", "Couldn't add the boundary condition. ('Node Number' cannot be empty.)")
    elif mag == '':
        messagebox.showerror("Boundary Condition Error", "Couldn't add the boundary condition. ('Magnitude' cannot be empty.)")
    else:
        for nn,x,y in nodes:
            if nn == int(node):
                tx = x
                ty = y
        if direct == 'X':
            ax = fig.gca()
            ax.set_xlim(0,2)
            ax.set_ylim(0,2)

            imageFile = 'trianglex.png'
            img = mpimg.imread(imageFile)
            imgplot = ax.imshow(img)
            transform = mpl.transforms.Affine2D().translate(tx,ty)
            imgplot.set_transform(transform + ax.transData)

            canvas.draw()


Когда я использую applyButton, он передает координаты узла, в котором я хочу создать треугольник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...