我正在編寫一個在Linux和Windows下都可以使用的應用程序。Tkinter進度欄不能在Windows下工作
對於我使用Tkinter的GUI,但是當我嘗試在Windows上運行我的程序時遇到問題。在Linux上,我開發它,它工作得很好。
我用一個ttk進度條的頂層來顯示在程序/ GUI顯示之前加載數據的進度。 Windows上缺少此進度條。它不會拋出錯誤,它似乎不在那裏。它應該是透明的地方,所以你可以看到頂層後面的窗口/桌面等。
任何想法爲什麼會發生這種情況?有沒有其他人有這個問題?
下面是調用頂層代碼:
import Tkinter as tk
import ttk
import platform
import time
class Window(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.init_progbar()
self.prog_data()
self.top.destroy()
#initializing progress bar, may be used with self.top
def init_progbar(self):
self.top = tk.Toplevel(self)
self.top.frame = tk.Frame(self.top)
self.top.frame.grid()
self.top.frame.progbar = ttk.Progressbar(self.top.frame, \
orient='horizontal', mode = 'determinate', length = '500')
self.top.frame.progbar.grid()
Window.center(self.top)
#static method to center a toplevel window
@staticmethod
def center(toplevel, size=None):
toplevel.update_idletasks()
w = toplevel.winfo_screenwidth()
h = toplevel.winfo_screenheight()
if not size:
size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x'))
x = w/2 - size[0]/2
y = h/2 - size[1]/2
toplevel.geometry("%dx%d+%d+%d" % (size + (x, y)))
#dummy method - somethings done, then the value of the progress bar
#is raised by 10
def prog_data(self):
for i in range(10):
time.sleep(1)
self.top.frame.progbar.step(10)
self.top.update_idletasks()
def main():
window = Window()
window.mainloop()
if __name__=='__main__':
main()
正如我剛纔所說,這是Linux下運行,沒有任何問題,它只是不工作在Windows上。
我在兩個不同的Linux系統(openSUSE和Ubuntu)上以及運行Windows,Windows 7和Windows 10的兩臺不同計算機上嘗試了它。每次出現同樣的問題 - Windows上缺少進度條。
第一步應該是創建一個[MCVE](http://stackoverflow.com/help/mcve)。這將a)讓您對問題有更深入的瞭解(並可能闡明解決方案),b)幫助我們重現問題。 –
沒有實際的工作代碼,我們不能複製問題,這使得診斷非常困難。 –
那麼代碼就在那裏。我不認爲我收集數據的代碼是必需的,只有一些行處理數據,然後是「self.top.frame.step(10)」這一行。任何其他與問題相關的代碼都在問題中。 – TobiasTomski