簡體   English   中英

如何通過tkinter Scale小部件的set方法使用文本文件中的值?

[英]How to use value from a text file with the `set` method of a tkinter Scale widget?

我創建了一個保存2個滑塊值的文件。 現在,我希望能夠從該文件中調出值以設置滑塊的值。

這是我當前的代碼:

from tkinter import *
import os.path
master= Tk()
master.geometry('500x500+0+0')



def print_value(val):
    print ("c1="+str (c1v.get()))
    print ("c2="+str(c2v.get()))


c1v=DoubleVar()
c2v=DoubleVar()

c1 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c1v)
c1.grid(row=1,column=1)
c2 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c2v)
c2.grid(row=1,column=2)

def record():

    save_path = 'C:/Users/Josh Bailey/Desktop/pi_dmx'
    name_of_file = ("my first file ")
    completeName = os.path.join(save_path, name_of_file+".txt")
    file1 = open(completeName , "w")
    toFile = ("c1="+str (c1.get())+ "\n""c2="+str(c2.get()))
    file1.write(toFile)
    file1.close()
    master.mainloop()

rec=Button(master, text="Record",width=20, height=10, bg='Red', command=record)
rec.grid(row=2, column=3)

load=Button(master, text="Load",width=20, height=10, bg='gold')
load.grid(row=2, column=4)

您可以這樣設置滑塊的值:

c1.set(100) #sets value to 100

因此,只需讀取一個文本文件,然后將示例中的100替換為文件中的值即可:

編碼:

try:
    f = open("my first file.txt")
    for each_line in f:
        (slider, value) = each_line.split("=")
        if slider == "c1":
            saved_c1 = value
        if slider == "c2":
            saved_c2 = value
except FileNotFoundError:
    pass

c1.set(saved_c1)
c2.set(saved_c2)

文件名(我的第一個文件)后還有尾隨空格。 最好擺脫它。

您需要創建一個函數以從文件中獲取數據,然后將其連接以進行load

按照您的樣式,該函數將如下所示:

def func():

    save_path = 'C:/Users/Josh Bailey/Desktop/pi_dmx'
    name_of_file = ("my first file ")
    completeName = os.path.join(save_path, name_of_file+".txt")
    file1 = open(completeName)
    val1, val2 = (x.split("=")[1] for x in file1)
    c1v.set(val1)
    c2v.set(val2)
    file1.close()

然后使用按鈕的command選項將其掛接以load

load=Button(master, text="Load",width=20, height=10, bg='gold', command=func)
load.grid(row=2, column=4)

總而言之,代碼應該是這樣的:

from tkinter import *
import os.path
master= Tk()
master.geometry('500x500+0+0')



def print_value(val):
    print ("c1="+str (c1v.get()))
    print ("c2="+str(c2v.get()))


c1v=DoubleVar()
c2v=DoubleVar()

c1 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c1v)
c1.grid(row=1,column=1)
c2 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c2v)
c2.grid(row=1,column=2)

def record():

    save_path = 'C:/Users/Josh Bailey/Desktop/pi_dmx'
    name_of_file = ("my first file ")
    completeName = os.path.join(save_path, name_of_file+".txt")
    file1 = open(completeName , "w")
    toFile = ("c1="+str (c1.get())+ "\n""c2="+str(c2.get()))
    file1.write(toFile)
    file1.close()
    master.mainloop()

rec=Button(master, text="Record",width=20, height=10, bg='Red', command=record)
rec.grid(row=2, column=3)

#################################################################
def func():

    save_path = 'C:/Users/Josh Bailey/Desktop/pi_dmx'
    name_of_file = ("my first file ")
    completeName = os.path.join(save_path, name_of_file+".txt")
    file1 = open(completeName)
    val1, val2 = (x.split("=")[1] for x in file1)
    c1v.set(val1)
    c2v.set(val2)
    file1.close()

load=Button(master, text="Load",width=20, height=10, bg='gold', command=func)
load.grid(row=2, column=4)
###################################################################
record()

另外,提示:打開文件時,應使用Python的with語句 它會自動為您關閉它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM