Ich habs. Das Problem war, dass im Header des Bildes eine andere Grösse stand, als ich wirklich hatte. Somit dachte mein tkinter, das bild sei so noch nicht komplett.
Hab gleich die nächste Frage =)
Ich möchte, wenn ich einen Teil des Bildes empfangen habe, den gleich darstellen. Ich nehme also meine Bilddaten, fülle den rest mit 0 auf (damit tkinter mit der grösse zufrieden ist) und zeige dann das ganze an:
Code: Alles auswählen
class MyClass(Frame):
sImage = "" ## Pfad des aktuell geladenen Bildes
photo = None ## aktuell geladenes Bild (Raster)
def __init__(self, parent, master=None):
Frame.__init__(self, master)
self.grid()
self.create_gui()
def create_gui(self):
Button(root,text="Quit",command=self.quit).grid()
Button(root,text="Bild",command=self.send_em).grid()
self.label = Label(root, image=self.photo)
self.label.grid()
def update_label(self, buffer):
im = Image.open( strIO.StringIO(buffer) ) # im = Image.open('test123.jpg')
im.thumbnail((380, 400), Image.ANTIALIAS)
self.photo = ImageTk.PhotoImage(im)
self.label.config(image = self.photo)
def send_em(self):
#~ plc.plc_remote_write_uart_no_ack(MASTER,10,11,data=[], repetitions = 0,debug = 0)
#~ RecvData()
f = open('hw0.bmp','rb')
self.fd = f.read()
f.close()
size = len(self.fd)
x = 1000
datSize = x
padSize = size - x
new = ''
new += self.fd[0:x]
new += '0' * padSize
self.update_label(new)
print '------------------------------------------'
time.sleep(0.5)
x = 2000
datSize = x
padSize = size - x
new = ''
new += self.fd[0:x]
new += '0' * padSize
print '------------------------------------------'
self.update_label(new)
root=Tk()
root.title("Viewer")
my_class = MyClass(root)
GUIFD = my_class
root.mainloop()
Komisch finde ich nun, dass tkinter den ersten aufruf von self.update_label(new) "ignoriert". Dass heisst, er zeigt mir erst das Bild beim letzten self.update_label(new) an. Egal wiviele zwischenschritte ich habe.
Gibt es sowas wie ein refresh() für tkinter? Oder kann mir jemand sagen, wiso sich tkinter so verhält?
Bin für jeden input dankbar.
greez