首页 > 解决方案 > tkinter 主题导致程序滞后

问题描述

tkinter 中的框架,框架由多个迷你长画布(包含一些文本和一个按钮)组成,可以使用滚动条上下滚动。我还使用 tkinter 主题让我的 gui 看起来不错。但是由于某种原因,一旦我在 gui 中添加,框架会在上下滚动时有点滞后,就像画布相互碰撞一样,他们要解决这个问题吗?

这是不滚动时的外观 在此处输入图像描述

这是它有时在滚动时的样子 在此处输入图像描述

这是代码

from tkinter import *
from ttkthemes.themed_tk import ThemedTk
from tkinter import *
from tkinter.ttk import *
import tkinter as tk
from tkinter import ttk
class tkinterprogram(ThemedTk):

    def __init__(self, *args, **kwargs):
        ThemedTk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}
        for F in (StartPage,Task):
            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
        frame.winfo_toplevel().geometry("1024x720")

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        ttk.Frame.__init__(self, parent)
        l = Canvas(self, bg='#4A4949')
        l.pack(fill='both', expand='True')
        global canvascon
        canvascon = Canvas(l, height=400,width=1500,bg='#4A4949',highlightthickness=0)
        global frame2
        frame2 = Frame(canvascon)
        global myscrollbar
        myscrollbar = Scrollbar(l, orient="vertical",command=canvascon.yview) 
        canvascon.create_window((0, 0), window=frame2,width=15000,anchor='nw')
        canvascon.place(x=25,y=150,relheight=0.558,relwidth=0.87)
        myscrollbar.pack(side=RIGHT, fill=Y,pady=25)
        Button(l,text='go',command=lambda: meth()).pack()

def meth():
    for count in range(25):
        c = Canvas(frame2, height=50, bg="#1E2133",highlightthickness=5,highlightbackground='#4A4949')
        lab = tk.Label(frame2, text='running',bg='#1E2133',fg='#EFEFEF')
        lab_window = c.create_window(10,15, window=lab,anchor=tk.NW)
        stop = tk.Button(frame2, text='STOP')
        stop_window = c.create_window(200, 15, window=stop, anchor=tk.NW)
        c.pack(fill=X,expand=True)
        frame2.update()  # update frame2 height so it's no longer 0 ( height is 0 when it has just been created )
        canvascon.configure(yscrollcommand=myscrollbar.set, scrollregion="0 0 0 %s" % frame2.winfo_height())

class Task(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)



app = tkinterprogram()
app.get_themes()
app.set_theme('scidgrey')
app.mainloop()

感谢您提前提供任何帮助。

标签: pythonooptkinterpycharmthemes

解决方案


推荐阅读