pal201
Фев. 17, 2010 15:55:49
Делаю так:
……….
……….
tk = Tk()
st=ScrolledText(tk,background=“grey”,font=('Tahoma',12,'bold'))
def win():
#tk = Tk()
st=ScrolledText(tk,background=“grey”,font=('Tahoma',12,'bold'))
st.pack(side=LEFT, fill=BOTH, expand=1)
tk.mainloop()
def print_log(tx):
global st
st.insert(END, tx)
if __name__=='__main__':
thread.start_new(win,())
print_log(u'==> Текст…\n')
далее по условию запускается еще 2 потока, но им не нужен GUI.
Задача такая, что бы писать лог в текстовое поле со скроллом.
В чем моя ошибка?
o7412369815963
Фев. 17, 2010 16:34:23
попробуй в ф-ию win добавить параметр: def win(param):
вот примеры исп. потоков
http://lega.selfip.com/page/37
pal201
Фев. 17, 2010 20:38:46
Я так понял, что проблема заключается в том, что создаются разные экземпляры объекта st, сначала в инициализации, а затем в фунции win. Но если не инициализировать st глобально, то тогда не видится из функции print_log. Как решить такую проблему?
truporez
Фев. 17, 2010 22:14:24
Сама постановка задачи неверна. Так делать не следует, во избежании различного рода граблей, потому как ui позволяет управлять своими контролами только из потока самого ui. Создайте очередь(Queue), и передавайте данные через нее. Можете создать ее глобально, либо в __main__ и передать в win вторым параметром, кортежем.