#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2022/04/02 09:37:01 +0900> """ tkinter Scrollbar + Canvas sample. Tkinterの使い方: スクロールバー(Scrollbar)の使い方 | だえうホームページ https://daeudaeu.com/scrollbar/ python - Tkinter button expand using grid - Stack Overflow https://stackoverflow.com/questions/53073534/tkinter-button-expand-using-grid python tkinter キャンバスのスクロールバーについて https://teratail.com/questions/54103 * Windows10 x64 21H2 + Python 2.7.18 32bit + Tkinter + Pillow 6.2.2 * Windows10 x64 21H2 + Python 3.9.12 64bit + tkinter + Pillow 9.0.1 """ try: # Python 2.7 import Tkinter as tk # import ttk except Exception: # Python 3.x import tkinter as tk # from tkinter import ttk from PIL import Image from PIL import ImageTk imgfile = "tex_1024.png" app = tk.Tk() frame = tk.Frame(app, bg="green") frame.pack(expand=1, fill=tk.BOTH) frame.columnconfigure(0, weight=1) frame.rowconfigure(0, weight=1) # create Canvas canvas = tk.Canvas(frame, bg="#888888") canvas.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E) # create Scrollbar xbar = tk.Scrollbar(frame, orient=tk.HORIZONTAL, command=canvas.xview) ybar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=canvas.yview) xbar.grid(row=1, column=0, sticky=tk.W + tk.E) ybar.grid(row=0, column=1, sticky=tk.N + tk.S) canvas.config(xscrollcommand=xbar.set) canvas.config(yscrollcommand=ybar.set) # load png image, set to canvas im = Image.open(imgfile) photo_image = ImageTk.PhotoImage(im) canvas.create_image(16, 16, anchor=tk.NW, image=photo_image) # set scroll region iw = photo_image.width() ih = photo_image.height() region = (0, 0, iw + 32, ih + 32) canvas.config(scrollregion=region) # set drag scroll canvas.bind("", lambda e: canvas.scan_mark(e.x, e.y)) canvas.bind("", lambda e: canvas.scan_dragto(e.x, e.y, gain=1)) app.mainloop()