2017-10-08 6 views
0

J'ai un fichier texte qui contient quatre mots ligne par ligne. Supposons par exemple que:Python Entry Widget mise à jour automatique des données et enregistrement dans un fichier texte

cat 
mat 
rat 
hat 

Je veux montrer ces mots dans un widget d'entrée. Comme "chat" dans le premier widget d'entrée, "mat" dans le deuxième widget d'entrée et ainsi de suite. Maintenant, si je mets à jour le contenu d'un widget d'entrée, il devrait également mettre à jour automatiquement dans le fichier texte. J'ai écrit quelques codes pour afficher les widgets d'entrée, mais après je ne comprends pas comment y parvenir?

from tkinter import * 
top = Tk() 

with open('C:/Users/jaykr/Desktop/data.txt') as file: 
    data = file.read().split("\n") 

for i in range(len(data)): 
    Entry(top).grid(row=i, column=0) 

top.mainloop() 

Répondre

1

Vous pouvez profiter de StringVarvariable class et sa méthode de trace() tkinter. Voici un MCVE:

import tkinter as tk 

root = tk.Tk() 

entry_var = tk.StringVar() 
entry = tk.Entry(root, width=10, textvariable=entry_var) 
entry.pack() 

def autoupdate(*args): 
    with open('test.txt', 'w') as f: 
     f.write(entry_var.get()) 

entry_var.trace('w', autoupdate) 

root.mainloop() 
+0

Merci beaucoup @mentalita. Cela fonctionne pour un seul widget d'entrée, mais je veux plus de 4 widgets d'entrée et les données devraient également s'afficher dans tous les widgets. Donc, vous demander de mettre à jour le code pour plus de widgers d'entrée. –

+0

@MritunjayKumarjaykr: vous ne pouvez pas 'demander' que j'écrive votre code pour vous. J'ai peur que tu doives le faire toi-même. Je vous ai déjà donné un exemple de comment vous pouvez faire ce que vous voulez faire, ce qui est plus que suffisant pour vous aider à démarrer. – mentalita

+0

ok @mentalita, laissez-moi essayer. En fait, le principal problème est de savoir comment faire la relation entre la ligne du fichier texte et les numéros de widget d'entrée. supposons que je modifie du texte dans le widget 3ème entrée que la 3ème ligne du fichier texte devrait être mise à jour. –