2015-06-23 2 views
2

Привет, я успешно создал графический интерфейс tkinter в python, который сохраняет введенные значения в текстовом файле. Вот код:Чтение содержимого txt-файла и отображение в Tkinter GUI Python

from Tkinter import * 
root = Tk() 
def save(): 
    open("text.txt","w").close() 
    text = e.get() + "\n" + e1.get() + "\n" + e2.get() + "\n" 
    with open("text.txt", "a") as f: 
     f.write(text) 
w1 = Label(root, text="Controller value") 
w1.pack() 
e = Entry(root) 
e.pack() 
w2 = Label(root, text="Velocity") 
w2.pack() 
e1 = Entry(root) 
e1.pack() 
w3 = Label(root, text="Desired Heading") 
w3.pack() 
e2 = Entry(root) 
e2.pack() 
toolbar = Frame(root) 
b = Button(toolbar, text="save", width=9, command=save) 
b.pack(side=LEFT, padx=2, pady=2) 
toolbar.pack(side=TOP, fill=X) 
mainloop() 

Теперь то, что я хочу сделать, это создать 3 новых текстовых полей в графическом интерфейсе, который будет отображать содержимое файла. Например мой text.txt файл имеет содержание:

3 

2 

4 

Теперь я хочу каждый из этих 3 значений, которые будут отображаться в 3 текстовых в GUI. В принципе, я хочу, чтобы первое текстовое поле в графическом интерфейсе отображало 3, второе текстовое поле 2 и третье текстовое поле 4. Помогите мне, пожалуйста.

ответ

1

Я не знаю, если вы хотите что-то вроде этого, но попробовать:

from Tkinter import * 


def save(e,e1,e2): 
    open("text.txt","w").close() 
    text = e.get() + "\t" + e1.get() + "\t" + e2.get() + "\t" 
    with open("text.txt", "a") as f: 
     f.write(text) 

def loadme(l,l2,l3): 
    f = open('text.txt','r') 
    line = f.readline() 
    la1,la2,la3 = line.split() 
    l.config(text=la1) 
    l2.config(text=la2) 
    l3.config(text=la3) 
    f.close() 

def main(): 
    root = Tk() 
    c = Canvas(root,width=600) 
    c.pack(side = 'left',expand=1,fill=BOTH) 

    c2 = Canvas(c,width=600) 
    c2.pack(side = 'left',expand=1,fill=BOTH) 
    c3 = Canvas(c,width=600) 
    c3.pack(side = 'left',expand=1,fill=BOTH) 

    w1 = Label(c2, text="Controller value") 
    w1.pack() 
    e = Entry(c2) 
    e.pack() 
    w2 = Label(c2, text="Velocity") 
    w2.pack() 
    e1 = Entry(c2) 
    e1.pack() 
    w3 = Label(c2, text="Desired Heading") 
    w3.pack() 
    e2 = Entry(c2) 
    e2.pack() 
    toolbar = Frame(c2) 
    b = Button(toolbar, text="save", width=9, command=lambda:save(e,e1,e2)) 
    b.pack(side=LEFT, padx=2, pady=2) 
    toolbar.pack(side=TOP, fill=X) 

    l = Label(c3,text='',bg='red') 
    l.pack(side='left',expand=1,fill='x') 
    l2 = Label(c3,text='',bg='yellow') 
    l2.pack(side='left',expand=1,fill='x') 
    l3 = Label(c3,text='',bg='blue') 
    l3.pack(side='left',expand=1,fill='x') 

    b2 = Button(c3,text='load',command=lambda:loadme(l,l2,l3)) 
    b2.pack(fill='x') 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

Спасибо Душан, что была большая помощь. Вы, кажется, мастер Python Tkinter, Хотя вы ответили на мой вопрос, но я хотел, чтобы красно-желтые синие поля отображались как поля скорости и желаемого заголовка, как и внешний вид. Есть ли способ сделать это? – Deepak

+0

Это также помогло бы, если бы на красных желтых синих ящиках были надписи на них .... изображающие, какие они есть. @Dusan – Deepak

1

как это? Изменения только в основной функции, так и нужно изменить только что 1.

def main(): 
    root = Tk() 
    c = Canvas(root,width=600) 
    c.pack(side = 'left',expand=1,fill=BOTH) 

    c2 = Canvas(c,width=600) 
    c2.pack(side = 'left',expand=1,fill=BOTH) 
    c3 = Canvas(c,width=600) 
    c3.pack(side = 'left',expand=1,fill=BOTH) 

    w1 = Label(c2, text="Controller value") 
    w1.pack() 
    e = Entry(c2) 
    e.pack() 
    w2 = Label(c2, text="Velocity") 
    w2.pack() 
    e1 = Entry(c2) 
    e1.pack() 
    w3 = Label(c2, text="Desired Heading") 
    w3.pack() 
    e2 = Entry(c2) 
    e2.pack() 
    toolbar = Frame(c2) 
    b = Button(toolbar, text="save", width=9, command=lambda:save(e,e1,e2)) 
    b.pack(side='left', padx=2, pady=2) 
    toolbar.pack(side=TOP, fill=X) 

    lt = Label(c3,text='Controller') 
    lt.pack(side='top',expand=1,fill='x') 
    l = Label(c3,text='',bg='red') 
    l.pack(side='top',expand=1,fill='x') 
    lt2 = Label(c3,text='Velocity') 
    lt2.pack(side='top',expand=1,fill='x') 
    l2 = Label(c3,text='',bg='yellow') 
    l2.pack(side='top',expand=1,fill='x') 
    lt3 = Label(c3,text='Desired Heading') 
    lt3.pack(side='top',expand=1,fill='x') 
    l3 = Label(c3,text='',bg='blue') 
    l3.pack(side='top',expand=1,fill='x') 

    b2 = Button(c3,text='load',command=lambda:loadme(l,l2,l3)) 
    b2.pack(fill='x', padx=2, pady=2) 
    root.mainloop() 
+0

@ Deepak Ну, если это не то, что вы хотите, можете рисовать в краске или где бы вы ни захотели какую-то схему для я вижу, я не знаю, чего хочу –

+0

Да, именно это я и просил. Большое спасибо Душан. – Deepak

+0

@ Deepak О, извините, у меня есть -1 на полезности, и я подумал, что это от вас –