【发布时间】:2023-02-03 18:37:19
【问题描述】:
我有一个问题,这是打开 GeoTiff 迷你照片库窗口但滚动对我不起作用的代码。代码有什么问题?我的印象是倒带和照片是两个独立的东西,我不知道如何将它们“粘合”在一起。非常感谢您的帮助。
import tkinter as tk
import glob
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import rasterio as rio
from rasterio.plot import show
SIZE_X = 100
SIZE_Y = 100
class Icon:
def __init__(self, root):
self.root = root
self.ybar = tk.Scrollbar(self.root)
self.item_canvas = tk.Canvas(self.root, width=354, height=401,
yscrollcommand=self.ybar.set)
self.ybar.configure(command=self.item_canvas.yview)
self.item_canvas.configure(scrollregion=(0, 0, 1000, 1000))
self.item_canvas.configure(background='#d8d8d9')
self.ybar.pack(side=tk.RIGHT, fill=tk.Y)
self.item_canvas.pack(side=tk.LEFT, expand=tk.TRUE, fill=tk.BOTH)
self.get_icons()
def get_dir(self):
link = r'work_dir/*.txt'
with open(link) as f:
self.file_photo = f.read()
self.link_to_dir = glob.glob(self.file_photo.rsplit('/', 1)[0] + '/*.tif')
self.number = len(self.link_to_dir)
def get_icons(self):
'''Method to add a mini gallery'''
self.get_dir()
FIGSIZE = 2.5
self.counter = -1
if self.number <= 2:
for i in range(0, self.number):
self.fig = Figure(figsize=(FIGSIZE, FIGSIZE), dpi=60)
self.canvasGeo = FigureCanvasTkAgg(self.fig, self.root)
self.canvasGeo.get_tk_widget().place(x=i * 220, y=10)
with rio.open(self.link_to_dir[i]) as src_plot:
show(src_plot, ax=self.fig.add_subplot())
self.canvasGeo.draw()
elif self.number > 2:
k = int()
y = []
for i in range(0, self.number):
if i % 2 == 0:
k = i
y.append(k)
for j in range(0, self.number):
self.counter += 1
if (j * 220) <= 220:
self.fig = Figure(figsize=(FIGSIZE, FIGSIZE), dpi=60)
self.canvasGeo = FigureCanvasTkAgg(self.fig, self.root)
self.canvasGeo.get_tk_widget().place(x=10 + j * 190, y=10)
with rio.open(self.link_to_dir[y[j]]) as src_plot:
show(src_plot, ax=self.fig.add_subplot())
self.canvasGeo.draw()
else:
self.fig = Figure(figsize=(FIGSIZE, FIGSIZE), dpi=60)
self.canvasGeo = FigureCanvasTkAgg(self.fig, self.root)
self.canvasGeo.get_tk_widget().place(x=(-175 * y[j]) + j * 180, y=85*y[j])
with rio.open(self.link_to_dir[y[j]]) as src_plot:
show(src_plot, ax=self.fig.add_subplot())
self.canvasGeo.draw()
else:
tk.Label(self.root, text='Wrong Value').place(x=220, y=10)
if __name__ == '__main__':
root = tk.Tk()
Icon(root)
root.mainloop()
【问题讨论】:
标签: python