ich habe mir ein bisschen was zusammengebastelt und möchte, dass OptionMenu bei jedem Start die Datei "text2.txt "neu einliest, damit die manuell eingebenen Werte auch berücksichtigt werden. Leider habe ich das nicht hinbekommen

Code: Alles auswählen
from Tkinter import *
from Tkinter import _setit
from pylab import grid, title
import tkMessageBox
ProgramLabel = " Test your Python :-)"
class App (Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.grid()
self.StartFrame()
def StartFrame (self):
# First frame for buttons
FirstFrame = Frame(root)
FirstFrame.grid()
self.var = StringVar()
self.var.set("1")
self.optionmenu = OptionMenu(FirstFrame, self.var, "2", command=self.readFile)
self.optionmenu.grid(row=0, column=0)
self.label_show = Label(FirstFrame, text="Current value")
self.label_show.grid(row=0, column=1)
self.entry_show = Entry(FirstFrame, textvariable=self.var)
self.entry_show.grid(row=0, column=2)
self.label_add = Label(FirstFrame, text="New Choice")
self.label_add.grid(row=0, column=3)
self.entry_add = Entry(FirstFrame)
self.entry_add.grid(row=0, column=4)
self.button_add = Button(FirstFrame, text="Add Choice", command=self.writeFile)
self.button_add.grid(row=0, column=5)
def writeFile (self):
self.value = self.entry_add.get()
self.menu = self.optionmenu["menu"]
self.variable = self.var
self.command = None # what you passed as command argument to optionmenu
self.menu.add_command(label=self.value, command=_setit(self.variable, self.value, self.command))
file1 = open("test2.txt","a")
#print (file1) # prints out details about the file
file1.write(self.value)
file1.write('\n')
file1.close()
def readFile (self):
self.fin = open("Test2.txt","r")
self.iVar = IntVar()
##self.ketchVar = IntVar()
self.menu = self.optionmenu["menu"]
self.lineList = self.fin.readlines()
for self.line in self.lineList:
print self.line,
self.optionmenu.insert(label=self.line, variable=self.iVar)
if __name__ == '__main__':
# TK requires this for widgets:
root = Tk()
# Calls parent widget
app = App()
root.title(ProgramLabel)
root.maxsize(width=500, height=500)
app.mainloop()