tkinter从txt文件中提取数据到按钮小部件

时间:2015-12-23 02:36:31

标签: python-3.x tkinter

对于我收集的所有信息,这是结果出来的..它有一个txt启动文件..(见图片)..打开它提取字符串将其转换为列表然后它转换为浮动打印数据shell n关闭txt文件(保存数据)然后将数据写入按钮小部件..通过简单的对话框更改现有数据..它将数据转换回字符串..但是..我试图找到覆盖现有的方法数据使用从简单对话框输入数据转换后的字符串..到特定区域或行中的现有txt启动文件..任何东西都有用tq :)

from tkinter import*
import tkinter as tk
import tkinter.simpledialog

def onChange(i):     
    btn_list[i].config(text='Updating...',bg='red')  
    btn_list[i].grid(in_=root,row=rw[i],column=2)
    ans=tk.simpledialog.askfloat('Updating....', 'What is the current price?')
    if ans:
        btn_list[i].config(text='RM {:,.2f}'.format(ans))
        btn_list[i].config(bg='yellow')
        c=str(ans)
        fw=open('dataTest.txt','w')
        fw.close()

root=Tk()

Title=['Item','Unit','Price']
Item=['Kopi O','Teh O','Teh Tarik']
Unit= '1 cup'
cl=[0,1,2]
rw=[1,2,3]
btn_list=[]
fr=open('dataUpdate.txt','r')

with open('dataUpdate.txt') as input_file:
    text=input_file.read()
    strings=text.split()
    number=[float(item) for item in strings]
    print(number)
    fr.close()

for k in range(3):
    btnT1=tk.Button(root,text=Title[k],width=12,bg='light green')
    btnT1.grid(in_=root,row=0,column=cl[k])

for x in range(3):
    btnT2=tk.Button(root,text=Item[x],width=12)
    btnT2.grid(in_=root,row=rw[x],column=0)

for y in range(3):
    btnT3=tk.Button(root,text=Unit,width=12)
    btnT3.grid(in_=root,row=rw[y],column=1)             

for z in range(3):
    btnT4=tk.Button(root,text=('RM {:,.2f}'.format(number[z])),bg='yellow',width=12,\
                command=lambda i=z:onChange(i))
    btnT4.grid(in_=root,row=rw[z],column=2)
    btn_list.append(btnT4)

root.mainloop()    

dataUpdate.txt

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您希望在dataUpdate.txt中存储您在运行时更改的值。当您阅读文件时,您已经创建了包含数字的list。使用此list并使用新值更新它。然后将列表中的每个条目写入文件。

要更新名为list的{​​{1}}中的条目,语法为:

number

您的onChange函数将类似于:

number[index] = value

顺便说一下,当你使用:

def onChange(i):
    btn_list[i].config(text='Updating...', bg='red')
    btn_list[i].grid(in_=root, row=rw[i], column=2)
    ans = tk.simpledialog.askfloat('Updating....', 'What is the current price?')
    if ans:
        btn_list[i].config(text='RM {:,.2f}'.format(ans))
        btn_list[i].config(bg='yellow')
        number[i] = ans
        with open('dataUpdate.txt', 'w') as file:
            for entry in number:
                file.write(str(entry) + "\n")

您无需以任何其他方式打开和关闭文件,因为这是由with open('dataUpdate.txt') as input_file: 处理的,因此您可以在代码中删除这些行:

with