放置在不同的线程中时,Tkinter图像会出现故障

时间:2018-01-06 21:53:47

标签: python image tkinter python-multithreading

所以我想制作一个gui并让图像出现在gui上,但是当我将图像放到gui上时它会开始闪烁,这取决于我在计算机上拖动gui的位置......

导致此效果的代码:

from tkinter import *
from threading import *
root = Tk()
root.resizable(False, False)

image1 = PhotoImage(file="GUI.png")
w = image1.width()
h = image1.height()
root.geometry("%dx%d+0+0" % (w, h))

panel1 = Label(root, image=image1)
panel1.pack(side='top', fill='both', expand='yes')
def PlaceImage():
    global panel1
    test = PhotoImage(file="test.png")
    label = Label(panel1, image=test)
    label.image = test
    label.place(x=0, y=0)
def thethread():
    PlaceImage()

thread = Thread(target=thethread)
thread.start()
root.mainloop()

gui出来很好,但我放置的图像是毛病。如果有人知道为什么会这样,以及如何解决它会非常有帮助!

1 个答案:

答案 0 :(得分:0)

执行此操作以查看是否可以消除此问题或是否在其他位置.i.e。在解决问题之前,我们必须知道问题所在。如果这确实解决了问题,那么接下来尝试PIL而不是PhotoImage。 我在Linux上运行时没有问题这也可能是因为你运行的新版本的Tkinter比OP正在运行它并且它将PIL合并到Tktinter中,而OP则没有。

from tkinter import *
from threading import *
root = Tk()
root.resizable(False, False)

image1 = PhotoImage(file="GUI.png")
w = image1.width()
h = image1.height()
root.geometry("%dx%d+0+0" % (w, h))

panel1 = Label(root, image=image1)
panel1.pack(side='top', fill='both', expand='yes')
def PlaceImage():
    global panel1
    ##test = PhotoImage(file="test.png")
    ##label = Label(panel1, image=test)
    ##abel.image = test
    ##label.place(x=0, y=0)
def thethread():
    PlaceImage()

thread = Thread(target=thethread)
thread.start()
root.mainloop()