2017-02-10 3 views
0

Я совершенно новый для этого сайта и питон вообще, так извините мой грязный код. Я пытаюсь сделать своего рода мессенджер в python с интерфейсом Tkinter. В моей школе есть сеть, на которой можно обмениваться файлами и редактировать файлы других людей, если они сохранены в правильной области с правильными разрешениями.Tkinter: Как сделать обновление виджета tkinter?

У меня есть большая часть из них, программа может сохранять в текстовый файл и читать его тоже, однако текстовый виджет, который содержит текст, не обновляет сам по себе все попытки сделать это, так и не удалось несчастно. Любая помощь будет оценена, поскольку я не могу понять ее.

from tkinter import * 

master = Tk() 
master.geometry("300x200") 
e = Entry(master) 
e.pack() 


def callback(): 
    f = open("htfl.txt","a") 
    f.write(e.get()) 
    print (e.get()) 

b = Button(master, text="get", width=10, command=callback) 

b.pack() 



file = open("htfl.txt","r") #opens file 

#print(file.read(1)) 
a = file.read() 
b = file.read() 
print(file.read()) 

T = Text(master, height=9, width=30) 
T.insert(END,a) 
T.pack() 

def update(): 
    T.insert(END,a) 
    T.after(1000, update) 

T.after(1000, update) 



mainloop() 
+1

Почему использование текста? используйте метку с StringVar. –

ответ

1

Вы должны перечитывать файл каждый раз, когда хотите обновить виджет. Например:

def update(): 
    with open("htfl.txt","r") as f: 
     data = f.read() 
     T.delete("1.0", "end") # if you want to remove the old data 
     T.insert(END,data) 
    T.after(1000, update) 
+0

Спасибо! это работает абсолютно отлично! Ты спас мне огромную головную боль! –

-1

Вместо использования Text, вы должны использовать Label. С помощью функции StringVar вы можете обновить текст ярлыка. Метка - это виджет, который может отображать текст в окне tk. Для того, чтобы использовать Label команду и StringVar, вам необходимо:

example = StringVar() 
example.set(END, a) 

examplelabel = Label(master, textvariable=example) 
examplelabel.pack() 

командной StringVar() просто делает текст изменчива, например

example = StringVar() 
example.set("Hello") 

def whenclicked(): 
    example.set("Goodbye") 

changebutton = Button(master, text="Change Label", command=whenclicked) 
changebutton.pack() 

examplelabel = Label(master, textvariable=example) 
examplelabel.pack() 

Это приведет к изменению ярлыка на прощанье при нажатии кнопки. Надеюсь, что смогу помочь :)

+0

Спасибо, что нашли время ответить! Я попытался сделать кнопку, чтобы установить метку в stringvar файла, о котором идет речь, но это просто делает ярлык пустым. –

+0

Виджет Label является неправильным выбором для отображения содержимого файла. –

+0

Вместо использования ярлыка, попробуйте текст – Jake

Смежные вопросы