Форум сайта python.su
Делаю так:
……….
……….
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.
Задача такая, что бы писать лог в текстовое поле со скроллом.
В чем моя ошибка?
Офлайн
попробуй в ф-ию win добавить параметр: def win(param):
вот примеры исп. потоков http://lega.selfip.com/page/37
Офлайн
Я так понял, что проблема заключается в том, что создаются разные экземпляры объекта st, сначала в инициализации, а затем в фунции win. Но если не инициализировать st глобально, то тогда не видится из функции print_log. Как решить такую проблему?
Офлайн
Сама постановка задачи неверна. Так делать не следует, во избежании различного рода граблей, потому как ui позволяет управлять своими контролами только из потока самого ui. Создайте очередь(Queue), и передавайте данные через нее. Можете создать ее глобально, либо в __main__ и передать в win вторым параметром, кортежем.
Офлайн