我有一個比例可以控制 Tkinter 框架中影像的放大和縮小。我想用滑鼠單擊影像并在框架中移動放大的影像,但是它不起作用。下面是我正在使用的代碼。任何幫助讓它作業將不勝感激。提前致謝。以下是我當前的代碼。
root = Tk()
canvas = tk.Canvas(root, height=500, width=500)
canvas.pack()
frame = customtkinter.CTkFrame(master=root, width=300, height=200)
frame.place(x=10, y=10)
canvas.bind('<ButtonPress-1>', move_from)
canvas.bind('<B1-Motion>', move_to)
###putting image on frame label###
def Image():
global img, img_label, IMG
IMG = Image.open('im.png')
img = ImageTk.PhotoImage(IMG.resize((280, 280), Image.ANTIALIAS))
img_label = Label(frame, image=img)
img_label.image = img
img_label.place(x=200, y=0)
img_label.pack(side=TOP, padx=20, pady=50)
return img_label
#### zoom function ####
def zoom_img(zoom):
global Img
newsize = (IMG.size[0]* int(zoom),
IMG.size[1]*int(zoom))
scaledIMG = IMG.resize(newsize, Image.LINEAR)
Img = ImageTk.PhotoImage(scaledIMG)
img_label.configure(image=Img, width=200, height=220)
img_label.place(x=80, y=0)
img_label.pack(side=TOP, padx=5, pady=5)
### scale ###
scale_label = customtkinter.CTkLabel(master=root, text="Zoom", width=50, fg_color="gray80").place(x=85, y=130)
var = StringVar()
scale = tk.Scale(root, variable=var, orient='horizontal', from_=1, to=5, length=200, resolution=1, command=zoom_img)
scale.place(x=85, y=140)
def move_from(event):
canvas.scan_mark(event.x, event.y)
def move_to(event):
canvas.scan_dragto(event.x, event.y, gain=1)
uj5u.com熱心網友回復:
您正在嘗試使用僅適用于畫布物件的畫布掃描功能。您不是在創建畫布物件,而是在創建標簽并將它們放置在畫布上pack。您將無法使用 、 或 滾動或掃描添加到畫布的pack任何place內容grid。
為了能夠使用掃描功能,您必須使用 canvas'create_image方法使影像成為畫布上的物件。
這是一個示例,展示如何使用畫布的掃描功能。注意:掃描功能不會移動影像,它會以與滾動條相同的方式移動視口。影像的實際坐標不會改變。
import tkinter as tk
def main():
root = tk.Tk()
image = tk.PhotoImage(data = image_data)
canvas = tk.Canvas(root, width=400, height=400, bg="white")
canvas.pack(fill="both", expand=True)
canvas.create_image(10, 10, anchor="nw", image=image)
canvas.bind("<ButtonPress-1>", drag_start)
canvas.bind("<B1-Motion>", drag_move)
root.mainloop()
def drag_start(event):
event.widget.scan_mark(event.x, event.y)
def drag_move(event):
event.widget.scan_dragto(event.x, event.y, gain=1)
image_data = """
R0lGODlhGAAYAPZvAAIaLgwmOwcnQQcoQBMxSBc4VBQ6Vhk7VRY9WhY XSI4RxJC
ZRRCZi9KYSFNbzJUbSJOcCZVeiZUeyBWfy1Zei5afB1Wgh1XgyFXgDpjgSVjkyZl
liZnmCxrmixsmjZtlSptoCpuoSxxqCxzqjh1oTV3qDR4qD5/rjV8tDV tUFlgUZp
hFNwhVVyh0ZzlUh7nnB8hUF8pkJ8pkx oTuBuFmBn3SEkHeOn3mNnUeBqUiBqUqD
q1CBpFKCpVuDoVyEokeGs0eHs0aKvkaMvlGOuGqKom Pp3yUpziEwTiFwz2KxT K
xE6VylKUw1qaxV6fx0CQ0E b1lCd1l6h0Wiq1Wyu12Wp22aq3FOi4F2s5WCt5W64
7XW24Xu743u/6omfsZymroqhso6jtJynsJ2psaS1w6S2xIvH7YvI7d/h5ODi5eDk
5 Dm6uLn7OPo7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH SUNvcHlyaWdodCBJTkNPUlMgR21iSCAod3d3Lmljb25l
eHBlcmllbmNlLmNvbSkgLSBVbmxpY2Vuc2VkIHByZXZpZXcgaW1hZ2UAIfkEBQAA
bwAsAAAAABgAGAAAB9eAb4KDhIWGh4iJiouMjY6PiGkwCgAACjBqj2ABBSw3Ny0H
AWONYwIqYmFfX2FiKwNki2kEFEZFRba3RhUEa4o2Cy41NT/FPsMuDDaKDRYfLzM8
PT0zMy8fFw2KBRoeJDI6Ojs5MSQdGwaKCCAmJ0FE8ERAJyUhCYoPIjRDTU5PT06a
CKEx4oEiHBuWMJlCpUoVKlOYKOFwQxEbB0ikXOHSpQsXK1GSQGizyIwFKFq8oDnj
JQsUDGYalYmAYsqWLVhSSIjpqM2RDBMuZDjiBpLRo0iTKjUaCAA7
"""
if __name__ == "__main__":
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/479818.html
