Приветствую!
В строке меню добавил элемент, при нажатии на который должен вызываться метод другого класса и передаваться ему значение переменной.
new_item.add_command(label='Запуск', command=Analyze.start(self.catalog))
Для проверки кода, просто завел метод start класса Analyze
class Analyze(object):
def start(x):
print(x+'123')
Проблема состоит в том, что тело функции start срабатывает сразу при инициализации элемента меню, а не при нажатии. Также если даже переменная у меня заполнена, при нажатии на элемент, ничего не происходит.
Полный блок:
import os
import xlsxwriter
from tkinter import *
from tkinter.ttk import *
from tkinter import filedialog
class Analyze(object):
def start(x):
print(x+'123')
class Interface(Frame):
catalog = ''
def chooseCatalog(self):
self.catalog = filedialog.askdirectory()
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.parent.title("Обработка файлов")
self.pack(fill=BOTH, expand = 1)
self.parent.resizable(0, 0)
self.centerWindow()
self.addMenu()
self.catalogButton = Button(self, text="Указать каталог с исходными файлами", command=self.chooseCatalog)
self.catalogButton.place(x=0, y=0, width=500,height=50)
def addMenu(self):
menu = Menu(self.parent)
new_item = Menu(menu, tearoff=0)
new_item.add_command(label='Запуск', command=Analyze.start(self.catalog))
new_item.add_command(label='Выход', command=self.exit)
menu.add_cascade(label='Файл', menu=new_item)
self.parent.config(menu=menu)
def centerWindow(self):
userWidth = 500
userHeigth = 250
windowWidth = self.parent.winfo_screenwidth()
windowHeigth = self.parent.winfo_screenheight()
x = (windowWidth-userWidth)/2
y = (windowHeigth-userHeigth)/2
self.parent.geometry('%dx%d+%d+%d' % (userWidth, userHeigth, x, y))
def exit(self):
self.quit()
def main():
window = Tk()
interface = Interface(window)
window.mainloop()
if __name__ == '__main__':
main()