Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter scale在每次调用函数时都会卡住_Python_Tkinter_Lag_Tkinter Scale - Fatal编程技术网

Python Tkinter scale在每次调用函数时都会卡住

Python Tkinter scale在每次调用函数时都会卡住,python,tkinter,lag,tkinter-scale,Python,Tkinter,Lag,Tkinter Scale,我有一个问题,每当我运行一个看起来很大的函数时,tkinter Scale小部件似乎就卡住了 代码如下: from tkinter import Tk, Button, Frame, Scale root = Tk() slider = Scale(root, orient='horizontal') slider.pack() frame = Frame(root) frame.pack() num = 0 def buttons(): for widget in fram

我有一个问题,每当我运行一个看起来很大的函数时,tkinter Scale小部件似乎就卡住了

代码如下:

from tkinter import Tk, Button, Frame, Scale

root = Tk()

slider = Scale(root, orient='horizontal')
slider.pack()

frame = Frame(root)
frame.pack()

num = 0


def buttons():
    for widget in frame.winfo_children():
        widget.destroy()

    for i in range(50):
        Button(frame, text='Button' + str(i)).pack()


def basic():
    global num
    slider.set(num)
    num += 1
    print(num)
    if num <= 100:
        slider.after(100, basic)


if __name__ == '__main__':
    buttons()
    basic()

root.bind('<space>', lambda x: buttons())
root.mainloop()
从tkinter导入Tk、按钮、框架、比例
root=Tk()
滑块=比例(根,方向=水平)
slider.pack()
帧=帧(根)
frame.pack()
num=0
def按钮():
对于frame.winfo_children()中的小部件:
widget.destroy()
对于范围(50)内的i:
按钮(框,text='Button'+str(i)).pack()
def basic():
全局数
slider.set(num)
num+=1
打印(个)
如果num查看此代码:

将tkinter作为tk导入
def配置按钮():
#获取第一个按钮的“文本”
起始值=int(按钮[0].cget(“文本”)+1
#迭代所有按钮
对于i,枚举中的按钮(按钮,开始=开始值):
#更改按钮的“文本”和“命令”属性
button.config(text=i,command=lambda i=i:print(“单击%i”%i))
root=tk.tk()
按钮=[]
添加按钮=tk.button(根,text=“+1 on all buttons”,command=config\u buttons)
添加按钮。包()
对于范围(50)内的i:
button=tk.button(root,text=i,command=lambda i=i:print(“单击的%i”%i))
button.pack()
按钮。追加(按钮)
root.mainloop()
当按下
add_按钮
按钮时,我迭代所有按钮并更改它们的
text
命令
属性。由于我没有创建新的按钮,该功能运行得非常快


您可以在代码中实现类似的东西。基本上,避免创建新按钮,只更新屏幕上已有的按钮。

buttons()
正在创建
50
按钮。这就是为什么要花很长时间。唯一的解决办法是每隔10毫秒添加一个按钮,直到达到所需的按钮数。你真的需要那么多按钮吗?我实际上需要更换这些按钮,它们代表我的应用程序中的歌曲,以便它们按字母顺序排列。这个数字甚至可能超过100。为什么不只加载需要显示的内容呢。我的猜测是,用户将无法看到所有100个。另外,重新绘制许多按钮也需要很多时间。你为什么要重画呢?如果您更改了它们的属性,请使用
.config(…)
。是的,正如@TheLizzard所说,您能告诉我们为什么需要重新绘制它们吗?因为正如他所提到的,也许有办法一次又一次地配置相同的按钮。@Thalis将所有按钮放在一个列表中,然后每次需要重新绘制它们时,只需更改它们的
文本和
命令属性即可。这将花费更少的时间,可能会解决您的问题。我想我不能使用您提供的确切代码,但我一般会使用这个想法,而不是创建-更新。谢谢@泰利斯告诉我它是否有效,我正在努力。我可以通过把他们排成另一排来改变他们的位置。我正在修改命令!