Code: Alles auswählen
import Tkinter
import threading
class TkTest(object):
def __init__(self):
self.root = Tkinter.Tk()
self.root.title("Test")
self.root.geometry("+500+300")
self.text = Tkinter.Text(
self.root,
height=20, width=80,
state=Tkinter.DISABLED
)
scollbar = Tkinter.Scrollbar(self.root)
scollbar.config(command=self.text.yview)
self.text.config(
yscrollcommand=scollbar.set, # XXX
)
scollbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
self.text.pack(side=Tkinter.LEFT, fill=Tkinter.Y)
self.root.bind("<Destroy>", self.destroy)
self.root.update()
def destroy(self, event=None):
self.root.quit()
def new_output_char(self, char):
self.text.config(state=Tkinter.NORMAL)
self.text.insert("end", char)
self.text.see("end")
self.text.config(state=Tkinter.DISABLED)
def mainloop(self):
self.root.mainloop()
def fill_with_chars(tk_win):
tk_win.new_output_char("X")
t = threading.Timer(0.001, fill_with_chars, args=[tk_win])
t.start()
if __name__ == "__main__":
tk_win = TkTest()
fill_with_chars(tk_win)
tk_win.mainloop()
Aber auch, wenn es auskommentiert ist, gibt es einen Crash, wenn man den Scrollbalken nutzten will.
Tracebacks sind unterschiedlich. Meist innerhalb von new_output_char()
Ich vermute mal, das ich irgendwie ein thread locking vornehmen muß. Aber wie?