【问题标题】:Can't run an infinite thread with Tkinter无法使用 Tkinter 运行无限线程
【发布时间】:2015-05-01 11:07:57
【问题描述】:

下面的代码有效,但如果我使线程成为无限循环(通过取消注释 i=False 行),窗口将不再显示。我错过了什么?
我的目标是在显示时不断更新图像。

from PIL import Image,ImageTk
from tkinter import Tk,Canvas,NW,mainloop
import threading
from time import sleep
from random  import randint
imgx = 512; imgy = 512


def mi_thread():
   global pix
   i=True
   while i:
     #i=False 
     for k in range(imgy):
        pix[k,k]=(randint(0,255),randint(0,255),randint(0,255))  
     sleep(1)

window = Tk()
canvas = Canvas(window, width = imgx, height = imgy, bg = "#000000");canvas.pack()
img2 = Image.new("RGB", (imgx, imgy))    

pix = img2.load()
t= threading.Thread(target=mi_thread())
t.start()
imgx =ImageTk.PhotoImage(img2)
canvas.create_image((0, 0), image = imgx, state = "normal", anchor = NW)

mainloop()

【问题讨论】:

    标签: python multithreading tkinter python-imaging-library


    【解决方案1】:

    threading.Thread(target=mi_thread()) 中,您实际上正在运行您的函数。您需要删除括号并仅传递函数引用。即:

    threading.Thread(target = mi_thread)
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2022-06-22
      • 1970-01-01
      • 2014-05-30
      • 2021-12-16
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多