Возникли проблемы при попытке заполнить виджет формы tk
Это действительно простой вопрос, и я немного не хочу его публиковать здесь, потому что должно быть действительно простое объяснение, но я не вижу его сейчас.
Я новичок в Python.У меня есть программа Python3 для выполнения некоторых задач в файле Excel.Программа использует три файла.Все, что мне нужно, это простой интерфейс, который позволяет пользователю выбрать файл сценария (файл1), файл процедур (файл2), и будет третий выходной файл.Затем используйте эти файлы для основной обработки.
Я скопировал код с некоторых веб-сайтов и исказил некоторые вместе, чтобы что-то придумать (см. Ниже).Тем не менее, я не могу понять, как я должен записать код обратно в текстовый виджет.
например, я бы ожидал что-то в виде Window.t_out = "new value" или self.t_out = "новое значение "
Однако я не вижу, как получить доступ к t_out, например.возможно, я создал больше путаницы, используя класс, но я подумал, что это предпочтительный способ.
Известные проблемы: 1. У меня есть .grid и .place, и я не собираюсь смешивать их, но просто пытаюсьчтобы увидеть, что лучше 2. Я не совсем уверен на данный момент, если я должен оставить функции кнопок с классом или вне класса, так как оба, кажется, работают.
class Window(Frame):
def __init__(self, master=None):
# parameters that you want to send through the Frame class.
Frame.__init__(self, master)
# reference to the master widget, which is the tk window
self.master = master
# with that, we want to then run init_window, which doesn't yet exist
self.init_window()
# Creation of init_window
def init_window(self):
self.master.title("Select Files to process") # changing the title of our master widget
# self.pack(fill=BOTH, expand=1) # allowing the widget to take the full space of the root window
TROW = 1
SROW = 2
PROW = 4
COL = 2
COLBTN = 30
# Define Menu
menu = Menu(self.master) # creating a menu instance
self.master.config(menu=menu)
file = Menu(menu) # create the file Menu
file.add_command(label="Exit", # adds a Exit to the menu option
command=self.menu_exit) # bind client_exit to run on event
menu.add_cascade(label="File", menu=file) # bind the function file to Menu "File" Label
edit = Menu(menu) # create the Edit Menu
edit.add_command(label="Undo",
command=self.menu_undo) # adds a command Undo to Edit menu
menu.add_cascade(label="Edit", menu=edit) # bind the function edit to Menu "Edit" Label
# Define Form
# Define the Labels
Label(self.master, text="File1").grid(row=SROW)
Label(self.master, text="File2").grid(row=PROW)
# Define the Widgets
t_out = Text(self.master, height=15, width =100)
t_scr = Text(self.master, height =1, width =90)
t_proc = Text(self.master, height =1, width =90)
t4 = Text(self.master, height=10, width=20)
# Define the positioning
t_out.grid(row=TROW, column=COL)
t_scr.grid(row=SROW, column=COL, sticky = W)
t_proc.grid(row=PROW, column=COL, sticky = W)
t4.place (x=50,y=320)
# Assign the widgets to procedures
Button(self.master, text='script',
command=get_script_file).grid(row=SROW, column=COLBTN, sticky=W, pady=4)
Button(self.master, text='procedure',
command=get_procedure_file).grid(row=PROW, column=COLBTN, sticky=W, pady=4)
Button(self.master, text='getVAL',
command=self.getval).place(x=320,y=310)
def getval(self):
from tkinter import filedialog
filename = filedialog.askopenfilename(initialdir="/", title="Select file",
filetypes=(("Excel Files", "*.xlsx"), ("all files", "*.*")))
# I NEED TO WRITE BACK THE FILENAME INTO THE TEXT WIDGET HERE
def menu_exit(self):
exit()
def menu_undo(self):
print ("Undo not implemented yet")
def get_script_file():
from tkinter import filedialog
root.filename = filedialog.askopenfilename(initialdir="/", title="Select file",
filetypes=(("Excel Files", "*.xlsx"), ("all files", "*.*")))
print("got ", root.filename)
# I NEED TO WRITE BACK THE FILENAME INTO THE TEXT WIDGET HERE ALSO
def get_procedure_file():
print ("Not implemented yet")
# root window created. Here, that would be the only window, but
# you can later have windows within windows.
root = Tk()
root.geometry("1000x400")
# creation of an instance
app = Window(root)
# mainloop
root.mainloop()