我正在编写一个在Linux和Windows下都可以使用的应用程序。在
对于GUI,我使用的是Tkinter,但是我在Windows上运行程序时遇到了一个问题。在我开发的Linux上,它运行得很好。在
在程序/GUI出现之前,我使用了一个带有ttk进度条的顶层来显示加载数据的进度。 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的两台不同的计算机上,一台是windows7,一台是windows10。每次出现相同的问题时,Windows上的进度条就会丢失。在
我自己找到了解决办法。问题是在Windows和Linux下的执行似乎有点不同。在
在上例中进入mainloop之前,Windows不会更新GUI。在Linux上处理这个问题显然是不同的,以确保正确的执行。在
为了清晰起见,我重新编写了示例代码,这样可以更清楚地了解需要更改的内容。查看注释以获得进一步的解释。在
相关问题 更多 >
编程相关推荐