带图片的可滚动框架

问题描述

我在tkinter中有一个可滚动的框架,并且在框架中我需要有许多单独的画布,并且每个画布都有自己的文本标签,图片标签和按钮。这些画布是线程化的,因为它们将保存文本信息。不断更新。但是,每当我滚动帧时,画布就会开始滞后,整个外观看起来很乱。

我尝试不使用线程来执行此操作,但是仍然会出现相同的问题。

我已经创建了我的代码的最小示例,请注意这个最小示例类似于我的原始代码,在我的原始代码中,画布包含的小部件比我给出的最小复制示例要多。

这是代码:

from tkinter import *
from PIL import Image
from PIL import ImageTk
import threading

root = Tk()
root.geometry('700x700')

class PhotoHandler:
    def __init__(self,ImagePath):
        self.reference = Canvas()
        self.ImagePath = ImagePath
        self.Image = Image.open(self.ImagePath)
        self.Image = ImageTk.PhotoImage(self.Image)
        self.reference.image = self.Image

    def ReturnImage(self):
        return self.Image

def onFrameConfigure(event):
    maincanvas.configure(scrollregion=maincanvas.bbox("all"))

def onCanvasConfigure(event):
    width = event.width - 4
    maincanvas.itemconfigure("frame",width=width)


maincanvas = Canvas(root,height=400,bg='white',highlightthickness=0,)
frame = Frame(maincanvas)
frame.pack(fill='both',expand=True)
frame.bind("<Configure>",onFrameConfigure)
maincanvas.bind("<Configure>",onCanvasConfigure)
maincanvas.create_window((0,0),window=frame,width=500,anchor='nw',tags='frame')
maincanvas.place(x=20,y=170,height=500,width=500)
myscrollbar = Scrollbar(root,orient="vertical",command=maincanvas.yview)
myscrollbar.pack(side=RIGHT,fill=Y)

LabelImage = PhotoHandler('Insert_Photo_Path').ReturnImage()

def go():

    canvas = Canvas(frame,height=70,bg='black',borderwidth=0,highlightthickness=0)
    Label(canvas,image=LabelImage,highlightthickness=0).place(relx=0.5,rely=0.5,anchor='center')
    canvas.pack(fill=X,expand=True)
    frame.update()
    maincanvas.configure(yscrollcommand=myscrollbar.set,scrollregion="0 0 0 %s" % frame.winfo_height())


for count in range(40):
    threading.Thread(target=go).start()
root.mainloop()

这是滚动时帧的外观图片:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...