Масштабирование осей холста в tkinter - PullRequest
0 голосов
/ 05 мая 2020

Я только новичок в платформе Tkinter. Мне нужна помощь. У меня есть изображение плана этажа, на котором будут присутствовать предметы. Я хочу иметь ограничивающий прямоугольник вокруг объектов на изображении. Я могу это сделать. Я знаю координаты объектов через какой-то другой код Matlab. Но проблема в том, что когда я вставляю изображение на холст, оно выходит за пределы экрана, потому что его размер больше, чем окно холста. Я могу изменить размер изображения. Но ограничивающая рамка не будет изменена, так что она не сможет правильно привязать объект. Итак, я хочу масштабировать оси, но не знаю как. Может кто-нибудь помочь мне масштабировать оси? или есть какой-либо другой метод, чтобы изменить размер изображения, и я мог привязать объекты.

Вот мой код

from tkinter import *

from PIL import Image,ImageTk
from tkinter import filedialog

root=Tk()
canvas=Canvas(root,width=400,height=500)
#canvas.pack(fill=BOTH, expand=1)
#canvas.pack()
canvas.grid(row=4,column=0,sticky=(N,W,E,S))
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(4, weight=1)


def click(txt):
    global label,btn1,btn2,btn3
    btn1.grid_forget()
    btn2.grid_forget()
    btn3.grid_forget()

    if txt=="3-room floorplan":
        root.filename=filedialog.askopenfilename(initialdir="C:\\Users\\User\\Desktop\\tkinter_codes\\floorplans\\ROBIN\\Dataset_3rooms",title="Select a file",filetypes=(("jpg files",".jpg"),("all files",".")))
    if txt=="4-room floorplan":
        root.filename=filedialog.askopenfilename(initialdir="C:\\Users\\User\\Desktop\\tkinter_codes\\floorplans\\ROBIN\\Dataset_4rooms",title="Select a file",filetypes=(("jpg files",".jpg"),("all files",".")))
    if txt=="5-room floorplan":
        root.filename=filedialog.askopenfilename(initialdir="C:\\Users\\User\\Desktop\\tkinter_codes\\floorplans\\ROBIN\\Dataset_5rooms",title="Select a file",filetypes=(("jpg files",".jpg"),("all files",".")))
    #label=Label(root,text=root.filename).pack()
    iimg=Image.open(root.filename)
    #iimg=iimg.resize((1225,685),Image.ANTIALIAS)
    canvas.img=ImageTk.PhotoImage(iimg)
    canvas_img=canvas.create_image(4,0,image=canvas.img,anchor="nw")
    #canvas.itemconfig(canvas_img, image=canvas.img)
    canvas.create_rectangle((32,38,208,122),outline='red')
    canvas.create_rectangle((23,685,123,760),outline='red')
    #image_label=Label(image=img).grid(row=5,column=2)





def open():
    global btn1,btn2,btn3
    btn1=Button(root,text="3-room floorplan",command=lambda: click("3-room floorplan"))
    btn1.grid(row=1,column=0,sticky=W)
    btn2=Button(root,text="4-room floorplan",command=lambda: click("4-room floorplan"))
    btn2.grid(row=2,column=0,sticky=W)
    btn3=Button(root,text="5-room floorplan",command=lambda: click("5-room floorplan"))
    btn3.grid(row=3,column=0,sticky=W)

#clicked.set("Insert")


def onclick(event):
    item = canvas.find_closest(event.x, event.y)
    #current_color = canvas.itemcget(item, 'fill')
    #if current_color == 'black':
    canvas.itemconfig(event.x, fill='white')
   # else:
    canvas.itemconfig(event.y, fill='black')


canvas.bind('<Button-1>', onclick)

#canvas.bind('<Button-1>', onclick)
#canvas.create_line(50, 50, 60, 60, width=2)
#drop=OptionMenu(root,clicked,"3-room floorplan","4-room floorplan","5-room floorplan",command=open)
#drop.pack()
btn=Button(root,text="Insert Floorplan",command=open,pady=5).grid(row=0,column=0,sticky=W)


root.mainloop()
...