here is the second script: # -\*- coding: utf-8 -\*-
# WARNING: This is a simplified zoom example.
# You should use more advanced techniques to not cram the memory
# with a huge resized image for the large zooms.
import random
import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk

class AutoScrollbar(ttk.Scrollbar):
 ''' A scrollbar that hides itself if it's not needed.
 Works only if you use the grid geometry manager '''
 def set(self, lo, hi):
 if float(lo) <= 0.0 and float(hi) >= 1.0:
 self.grid\_remove()
 else:
 self.grid()
 ttk.Scrollbar.set(self, lo, hi)

 def pack(self, \*\*kw):
 raise tk.TclError('Cannot use pack with this widget')

 def place(self, \*\*kw):
 raise tk.TclError('Cannot use place with this widget')

class Zoom(ttk.Frame):
 ''' Simple zoom with mouse wheel '''
 def \_\_init\_\_(self, mainframe, path):
 ''' Initialize the main Frame '''
 ttk.Frame.\_\_init\_\_(self, master=mainframe)
 self.master.title('Simple zoom with mouse wheel')
 # Vertical and horizontal scrollbars for canvas
 vbar = AutoScrollbar(self.master, orient='vertical')
 hbar = AutoScrollbar(self.master, orient='horizontal')
 vbar.grid(row=0, column=1, sticky='ns')
 hbar.grid(row=1, column=0, sticky='we')
 # Open image
 self.image = Image.open(path)
 # Create canvas and put image on it
 self.canvas = tk.Canvas(self.master, highlightthickness=0,
 xscrollcommand=hbar.set, yscrollcommand=vbar.set)
 self.canvas.grid(row=0, column=0, sticky='nswe')
 vbar.configure(command=self.canvas.yview) # bind scrollbars to the canvas
 hbar.configure(command=self.canvas.xview)
 # Make the canvas expandable
 self.master.rowconfigure(0, weight=1)
 self.master.columnconfigure(0, weight=1)
 # Bind events to the Canvas
 self.canvas.bind('', self.move\_from)
 self.canvas.bind('', self.move\_to)
 self.canvas.bind('', self.wheel) # with Windows and MacOS, but not Linux
 self.canvas.bind('', self.wheel) # only with Linux, wheel scroll down
 self.canvas.bind('', self.wheel) # only with Linux, wheel scroll up
 # Show image and plot some random test rectangles on the canvas
 self.imscale = 1.0
 self.imageid = None
 self.delta = 0.75
 width, height = self.image.size
 minsize, maxsize = 5, 20
 for n in range(10):
 x0 = random.randint(0, width - maxsize)
 y0 = random.randint(0, height - maxsize)
 x1 = x0 + random.randint(minsize, maxsize)
 y1 = y0 + random.randint(minsize, maxsize)
 color = ('red', 'orange', 'yellow', 'green', 'blue')[random.randint(0, 4)]
 self.canvas.create\_rectangle(x0, y0, x1, y1, outline='black', fill=color,
 activefill='black', tags=n)
 # Text is used to set proper coordinates to the image. You can make it invisible.
 self.text = self.canvas.create\_text(0, 0, anchor='nw', text='Scroll to zoom')
 self.show\_image()
 self.canvas.configure(scrollregion=self.canvas.bbox('all'))

 def move\_from(self, event):
 ''' Remember previous coordinates for scrolling with the mouse '''
 self.canvas.scan\_mark(event.x, event.y)

 def move\_to(self, event):
 ''' Drag (move) canvas to the new position '''
 self.canvas.scan\_dragto(event.x, event.y, gain=1)

 def wheel(self, event):
 ''' Zoom with mouse wheel '''
 scale = 1.0
 # Respond to Linux (event.num) or Windows (event.delta) wheel event
 if event.num == 5 or event.delta == -120:
 scale \*= self.delta
 self.imscale \*= self.delta
 if event.num == 4 or event.delta == 120:
 scale /= self.delta
 self.imscale /= self.delta
 # Rescale all canvas objects
 x = self.canvas.canvasx(event.x)
 y = self.canvas.canvasy(event.y)
 self.canvas.scale('all', x, y, scale, scale)
 self.show\_image()
 self.canvas.configure(scrollregion=self.canvas.bbox('all'))

 def show\_image(self):
 ''' Show image on the Canvas '''
 if self.imageid:
 self.canvas.delete(self.imageid)
 self.imageid = None
 self.canvas.imagetk = None # delete previous image from the canvas
 width, height = self.image.size
 new\_size = int(self.imscale \* width), int(self.imscale \* height)
 imagetk = ImageTk.PhotoImage(self.image.resize(new\_size))
 # Use self.text object to set proper coordinates
 self.imageid = self.canvas.create\_image(self.canvas.coords(self.text),
 anchor='nw', image=imagetk)
 self.canvas.lower(self.imageid) # set it into background
 self.canvas.imagetk = imagetk # keep an extra reference to prevent garbage-collection

path = 'doge2.jpg' # place path to your image here
root = tk.Tk()
app = Zoom(root, path=path)
root.mainloop()
다음은 두 번째 스크립트입니다: # -\*- 코딩: utf-8 -\*-# 경고: 이것은 단순화된 줌 예제입니다.큰 확대/축소를 위해 크기가 큰 이미지로 메모리를 가득 채우지 않으려면 # 고급 기술을 사용해야 합니다.# 메모리를 가득 채우지 않으려면 더 고급 기술을 사용해야 합니다.임포트 랜덤tkinter를 tk로 임포트tkinter에서 ttk 가져오기PIL에서 이미지, ImageTk를 임포트합니다.class AutoScrollbar(ttk.Scrollbar): ''' 필요하지 않으면 스스로 숨기는 스크롤바. 그리드 지오메트리 관리자 '''를 사용하는 경우에만 작동합니다. def set(self, lo, hi): if float(lo) <= 0.0 and float(hi) >= 1.0: self.grid\_remove() else: self.grid() ttk.Scrollbar.set(self, lo, hi) def pack(self, \*\*kw): raise tk.TclError('이 위젯에 팩을 사용할 수 없습니다') def place(self, \*\*kw): raise tk.TclError('이 위젯에 place를 사용할 수 없습니다')Zoom(ttk.Frame) 클래스: ''' 마우스 휠로 간단한 줌 ''' def \_\_init\_\_(self, 메인프레임, 경로): ''' 메인 프레임 초기화 ''' ttk.Frame.\_\_init\_\_(self, master=mainframe) self.master.title('마우스 휠로 간단한 줌') # 캔버스의 세로 및 가로 스크롤바 vbar = AutoScrollbar(self.master, orient='세로') hbar = AutoScrollbar(self.master, orient='가로') vbar.grid(행=0, 열=1, sticky='ns') hbar.grid(행=1, 열=0, sticky='we') # 이미지 열기 self.image = Image.open(path) # 캔버스를 생성하고 그 위에 이미지 넣기 self.캔버스 = tk.캔버스(self.마스터, 하이라이트 두께=0, xscrollcommand=hbar.set, yscrollcommand=vbar.set) self.canvas.grid(행=0, 열=0, sticky='nswe') vbar.configure(command=self.canvas.yview) # 스크롤바를 캔버스에 바인딩합니다. hbar.configure(command=self.canvas.xview) # 캔버스를 확장 가능하게 만들기 self.master.rowconfigure(0, weight=1) self.master.columnconfigure(0, weight=1) # 이벤트를 캔버스에 바인딩 self.canvas.bind('', self.move\_from) self.canvas.bind('', self.move\_to) self.canvas.bind('', self.wheel) # 윈도우와 맥OS에서는 가능하지만 리눅스에서는 불가능합니다. self.canvas.bind('', self.wheel) # 리눅스에서만, 휠 스크롤 다운 self.canvas.bind('', self.wheel) # 리눅스에서만, 휠 스크롤 업 # 이미지를 표시하고 캔버스에 임의의 테스트 사각형을 플롯합니다. self.imscale = 1.0 self.imageid = None self.delta = 0.75 너비, 높이 = self.image.size 최소 크기, 최대 크기 = 5, 20 범위(10)의 n에 대해 x0 = random.randint(0, width - maxsize) y0 = random.randint(0, 높이 - 최대 크기) x1 = x0 + random.randint(minsize, maxsize) y1 = y0 + random.randint(minsize, maxsize) color = ('빨강', '주황', '노랑', '초록', '파랑')[random.randint(0, 4)] self.canvas.create\_rectangle(x0, y0, x1, y1, outline='black', fill=color, activefill='black', tags=n) # 텍스트는 이미지에 적절한 좌표를 설정하는 데 사용됩니다. 보이지 않게 설정할 수 있습니다. self.text = self.canvas.create\_text(0, 0, anchor='nw', text='스크롤하여 확대') self.show\_image() self.canvas.configure(scrollregion=self.canvas.bbox('all')) def move\_from(self, event): ''' 마우스로 스크롤하기 위한 이전 좌표 기억 ''' self.canvas.scan\_mark(event.x, event.y) def move\_to(self, event): ''' 캔버스를 새 위치로 드래그(이동) ''' self.canvas.scan\_dragto(event.x, event.y, gain=1) def wheel(self, event): ''' 마우스 휠로 줌 ''' scale = 1.0 # 리눅스(event.num) 또는 윈도우(event.delta) 휠 이벤트에 응답합니다. event.num == 5 또는 event.delta == -120: scale \*= self.delta self.imscale \*= self.delta event.num == 4 또는 event.delta == 120: scale /= self.delta self.imscale /= self.delta # 모든 캔버스 객체 크기 조정 x = self.canvas.canvasx(event.x) y = self.canvas.canvasy(event.y) self.canvas.scale('all', x, y, scale, scale) self.show\_image() self.canvas.configure(scrollregion=self.canvas.bbox('all')) def show\_image(self): ''' 캔버스에 이미지 표시 ''' if self.imageid: self.canvas.delete(self.imageid) self.imageid = None self.canvas.imagetk = None # 캔버스에서 이전 이미지 삭제 너비, 높이 = self.image.size new\_size = int(self.imscale \* 너비), int(self.imscale \* 높이) imagetk = ImageTk.PhotoImage(self.image.resize(new\_size)) # self.text 객체를 사용하여 적절한 좌표 설정 self.imageid = self.캔버스.create\_image(self.캔버스.coords(self.text), 앵커='nw', 이미지=이미지) self.canvas.lower(self.imageid) # 백그라운드로 설정 self.canvas.imagetk = imagetk # 가비지 수집을 방지하기 위해 추가 참조 유지경로 = 'doge2.jpg' # 여기에 이미지 경로를 배치합니다.root = tk.Tk()app = 줌(root, 경로=경로)root.mainloop()