yscrollcommand=scollbar.set crash...
Verfasst: Mittwoch 23. Juli 2014, 17:30
Hier mal ein Test code, herrausgepopelt aus DragonPy:
Wegen dem yscrollcommand=scollbar.set in Zeile 18, crashed Tk recht schnell... Zumindest läuft es besser, wenn es auskommentiert ist.
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?
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?