Tkinter Progressbar Python

Tkinter Progressbar Python,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,这是一个更具体的个人问题,所以它不会吸引其他人太多,但我需要帮助制定我的进度条,我已经有了其他一些堆栈链接的大部分,但它只是保持空的任何帮助 这里是我构建进度条的地方(它渲染得很好) 然后我想在按下此按钮时调用此函数: 按钮: self.add_points = tk.Button(self.settingsLabel, text=u"Add points", command=self

这是一个更具体的个人问题,所以它不会吸引其他人太多,但我需要帮助制定我的进度条,我已经有了其他一些堆栈链接的大部分,但它只是保持空的任何帮助

这里是我构建进度条的地方(它渲染得很好)

然后我想在按下此按钮时调用此函数:

按钮:

self.add_points = tk.Button(self.settingsLabel,
                            text=u"Add points",
                            command=self.gainPoint)
功能:

def gainPoint(self):
    # run once the player has completed a word
    if self.difficulty == self.difficulties["Easy"]:
        self.pointValue += 1
    if self.difficulty == self.difficulties["Medium"]:
        self.pointValue += 1.5
    if self.difficulty == self.difficulties["Hard"]:
        self.pointValue += 2
    while self.pointValue >= (self.levelValue + 5):
        self.levelValue += 1
        self.pointValue -= (self.levelValue + 5)
        if self.pointValue < 0:
            self.pointValue = 0

    self.pointsVar.set(self.pointValue)
    self.levelVar.set(self.levelValue)
    self.pb["maximum"] = self.levelValue + 5
    self.pb["value"] = self.pointValue
def增益点(自):
#玩家完成一个单词后,立即跑步
如果self.diffusion==self.diffuses[“Easy”]:
self.pointValue+=1
如果self.diffusion==self.diffuses[“Medium”]:
self.pointValue+=1.5
如果self.diffusion==self.diffuses[“Hard”]:
self.pointValue+=2
而self.pointValue>=(self.levelValue+5):
self.levelValue+=1
self.pointValue-=(self.levelValue+5)
如果self.pointValue<0:
self.pointValue=0
self.pointsVar.set(self.pointValue)
self.levelVar.set(self.levelValue)
self.pb[“最大”]=self.levelValue+5
self.pb[“value”]=self.pointValue
我想这与我做
self.pb[“value”]
self.pb[“maximun”]
的时候有关,请帮忙


预期结果应该是当我按下
self.add_points
按钮时,它应该根据
self.levelValue+5

将进度条增加一点。我也尝试过将
不确定
切换到
确定
问题可能是因为您的代码阻塞了更新小部件的
主循环
数据、重画小部件以及做许多其他事情。您可以尝试在
中使用
root.update()
强制
mainloop
更新小部件。或者使用
root.after(毫秒,function\u name)
而不是
while
这样
mainloop
将执行
function\u name()
并几乎并行地更新小部件。它不应该立即发生,然后像普通程序一样继续运行吗?我应该在调用gainPoint之前将小部件放入吗?它会立即发生,因为
mainloop
正在这样做。但当您单击按钮时,
mainloop
执行您的函数
gainPoint
并等待它结束-在您的函数结束后,
mainloop
可以再次工作,它可以用新值重新绘制
progressbar
。所以问题是
循环-在这个循环中尝试
root.update()
,让mainloop更新/重画小部件。
def gainPoint(self):
    # run once the player has completed a word
    if self.difficulty == self.difficulties["Easy"]:
        self.pointValue += 1
    if self.difficulty == self.difficulties["Medium"]:
        self.pointValue += 1.5
    if self.difficulty == self.difficulties["Hard"]:
        self.pointValue += 2
    while self.pointValue >= (self.levelValue + 5):
        self.levelValue += 1
        self.pointValue -= (self.levelValue + 5)
        if self.pointValue < 0:
            self.pointValue = 0

    self.pointsVar.set(self.pointValue)
    self.levelVar.set(self.levelValue)
    self.pb["maximum"] = self.levelValue + 5
    self.pb["value"] = self.pointValue