【问题标题】:Open Tkinter multiple Windows with delay (Python)延迟打开 Tkinter 多个 Windows(Python)
【发布时间】:2015-12-01 15:11:00
【问题描述】:

我一直在尝试打开几个 Tkinter 窗口,每个 Tkinter 窗口之间有几秒钟的延迟。

到目前为止我的脚本:

import Tkinter as tk
import os
from PIL import Image, ImageTk
from win32api import GetSystemMetrics
from time import sleep
from random import uniform

root = tk.Tk()
tk.Label(root, text="this is the root window").pack()
root.geometry("10x10")
l = []

def showPic(i):
    if(i<5):
        loc = os.getcwd() + '\pictures\pic%s.jpg' % i
        img = Image.open(loc)
        img.load()
        photoImg = ImageTk.PhotoImage(img)
        l.append(photoImg)
        window = tk.Toplevel()
        window.geometry("750x750+%d+%d" % (uniform(0, GetSystemMetrics(0) - 750),     uniform(0, GetSystemMetrics(1) - 750)))
        tk.Label(window, text="this is window %s" % i).pack()
        tk.Label(window, image=photoImg).pack()
        root.after(1000, showPic(i+1))
    else:
        return


root.after(0, showPic(1))
root.mainloop()

我也尝试使用 sleep() 和 after() 函数,但没有成功。 它在准备窗口之前等待时间,但在我设置的时间之后同时将它们一起显示

【问题讨论】:

  • after 需要不带 () 和参数的函数名。

标签: python multithreading image tkinter


【解决方案1】:

after 需要没有 () 和参数的函数名

使用

root.after(1000, showPic(i+1))

就像

result = showPic(i+1)
root.after(1000, result)

你可以使用lambda

root.after(1000, lambda:showPic(i+1))

因为它几乎像

def new_function():
    showPic(i+1)

root.after(1000, new_function)

root.after(1000, showPic, i+1)

【讨论】:

  • 非常感谢!卡了这么久。非常感谢!
猜你喜欢
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多