Tkinter Scrollable Window with Zoom/Mouse Scroll and Arrows
Tkinter Scrollabe Window with Zoom/Mouse Scroll and Arrows
我非常需要你的帮助,我正在尝试制作一个显示图像的 window,但是那个图像很大,我需要 window 是滚动条,我想要使用滚轮和键盘箭头进行导航。我知道这是可能的,但我只需要一些代码方面的帮助。我无法在任何地方解决的最大问题是放大和缩小该图像 window 导航。
如果你能帮助我,我将不胜感激。我正在使用 Tkinter,windows 为 类。
from tkscrolledframe import ScrolledFrame
sf = ScrolledFrame(self, width=6800, height=2180, bg="#273852")
sf.pack(side="top", expand=1, fill="both")
sf.bind_arrow_keys(self)
sf.bind_scroll_wheel(self)
inner_frame = sf.display_widget(tk.Frame)
load = Image.open('overview.jpg')
render = ImageTk.PhotoImage(load)
img = tk.Label(inner_frame, image=render, bg="#273852", borderwidth=0, highlightthickness=0)
img.image = render
img.grid()
Ps.: 这就是我正在使用的代码,但是箭头和滚轮不起作用
正如您使用的 tkscrolledframe
,下面是一个适用于我的 Windows 运行 Python 3:
的示例
import tkinter as tk
from tkscrolledframe import ScrolledFrame
from PIL import ImageTk, Image
root = tk.Tk()
root.geometry('800x600+100+100')
sf = ScrolledFrame(root)
sf.pack(fill=tk.BOTH, expand=1)
img = Image.open('images/big.png')
tkimg = ImageTk.PhotoImage(img)
imgbox = sf.display_widget(tk.Label, image=tkimg)
# make imgbox get focus when mouse clicked on it
imgbox.bind('<Button-1>', lambda e: imgbox.focus_set())
sf.bind_arrow_keys(imgbox)
sf.bind_scroll_wheel(imgbox)
# make imgbox get focus in order to receive key events
imgbox.focus_set()
root.mainloop()
如果您想要更多控制而不使用 tkscrolledframe
,下面是另一个示例:
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
root.geometry('800x600+400+300')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
canvas = tk.Canvas(root)
vsb = tk.Scrollbar(root, orient=tk.VERTICAL, command=canvas.yview)
hsb = tk.Scrollbar(root, orient=tk.HORIZONTAL, command=canvas.xview)
canvas.config(xscrollcommand=hsb.set, yscrollcommand=vsb.set)
canvas.grid(row=0, column=0, sticky='nsew')
vsb.grid(row=0, column=1, sticky='ns')
hsb.grid(row=1, column=0, sticky='ew')
img = ImageTk.PhotoImage(file='images/big.png')
bgimg = canvas.create_image(0, 0, image=img, anchor=tk.NW)
canvas.config(scrollregion=(0, 0, img.width(), img.height()))
def scroll_horizontal(dx):
canvas.xview_scroll(dx, 'units')
def scroll_vertical(dy):
canvas.yview_scroll(dy, 'units')
canvas.bind('<MouseWheel>', lambda e: scroll_vertical(-e.delta//120))
canvas.bind('<Button-1>', lambda e: canvas.focus_set())
canvas.bind('<Up>', lambda e: scroll_vertical(-1))
canvas.bind('<Down>', lambda e: scroll_vertical(+1))
canvas.bind('<Left>', lambda e: scroll_horizontal(-1))
canvas.bind('<Right>', lambda e: scroll_horizontal(+1))
# if using bind_all, no need to call canvas.focus_set()
canvas.focus_set() # canvas must be focused to receive keyboard events
root.mainloop()
我非常需要你的帮助,我正在尝试制作一个显示图像的 window,但是那个图像很大,我需要 window 是滚动条,我想要使用滚轮和键盘箭头进行导航。我知道这是可能的,但我只需要一些代码方面的帮助。我无法在任何地方解决的最大问题是放大和缩小该图像 window 导航。
如果你能帮助我,我将不胜感激。我正在使用 Tkinter,windows 为 类。
from tkscrolledframe import ScrolledFrame sf = ScrolledFrame(self, width=6800, height=2180, bg="#273852") sf.pack(side="top", expand=1, fill="both") sf.bind_arrow_keys(self) sf.bind_scroll_wheel(self) inner_frame = sf.display_widget(tk.Frame) load = Image.open('overview.jpg') render = ImageTk.PhotoImage(load) img = tk.Label(inner_frame, image=render, bg="#273852", borderwidth=0, highlightthickness=0) img.image = render img.grid()
Ps.: 这就是我正在使用的代码,但是箭头和滚轮不起作用
正如您使用的 tkscrolledframe
,下面是一个适用于我的 Windows 运行 Python 3:
import tkinter as tk
from tkscrolledframe import ScrolledFrame
from PIL import ImageTk, Image
root = tk.Tk()
root.geometry('800x600+100+100')
sf = ScrolledFrame(root)
sf.pack(fill=tk.BOTH, expand=1)
img = Image.open('images/big.png')
tkimg = ImageTk.PhotoImage(img)
imgbox = sf.display_widget(tk.Label, image=tkimg)
# make imgbox get focus when mouse clicked on it
imgbox.bind('<Button-1>', lambda e: imgbox.focus_set())
sf.bind_arrow_keys(imgbox)
sf.bind_scroll_wheel(imgbox)
# make imgbox get focus in order to receive key events
imgbox.focus_set()
root.mainloop()
如果您想要更多控制而不使用 tkscrolledframe
,下面是另一个示例:
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
root.geometry('800x600+400+300')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
canvas = tk.Canvas(root)
vsb = tk.Scrollbar(root, orient=tk.VERTICAL, command=canvas.yview)
hsb = tk.Scrollbar(root, orient=tk.HORIZONTAL, command=canvas.xview)
canvas.config(xscrollcommand=hsb.set, yscrollcommand=vsb.set)
canvas.grid(row=0, column=0, sticky='nsew')
vsb.grid(row=0, column=1, sticky='ns')
hsb.grid(row=1, column=0, sticky='ew')
img = ImageTk.PhotoImage(file='images/big.png')
bgimg = canvas.create_image(0, 0, image=img, anchor=tk.NW)
canvas.config(scrollregion=(0, 0, img.width(), img.height()))
def scroll_horizontal(dx):
canvas.xview_scroll(dx, 'units')
def scroll_vertical(dy):
canvas.yview_scroll(dy, 'units')
canvas.bind('<MouseWheel>', lambda e: scroll_vertical(-e.delta//120))
canvas.bind('<Button-1>', lambda e: canvas.focus_set())
canvas.bind('<Up>', lambda e: scroll_vertical(-1))
canvas.bind('<Down>', lambda e: scroll_vertical(+1))
canvas.bind('<Left>', lambda e: scroll_horizontal(-1))
canvas.bind('<Right>', lambda e: scroll_horizontal(+1))
# if using bind_all, no need to call canvas.focus_set()
canvas.focus_set() # canvas must be focused to receive keyboard events
root.mainloop()