У меня есть строка меню в модуле views1.py, и я импортирую ее в основной модуль, используя OOP. Я не получаю ни сообщения об ошибке, ни строки меню. Окно открывается как обычно с загруженным другим содержимым. Приложение разрабатывается как пакет со следующей структурой каталогов:
Главный каталог содержит два файла main.py и README.rst и каталог с именем нижний регистр main. Этот каталог строчные main содержит файлы views1.py, controller.py и model.py.
1. Main directory
- main.py
- README.rst
- main directory
* views1.py
* model.py
* controller.py
main.py
from tkinter import Tk
import tkinter as tk
import controller
import views1
from tkinter import *
from views1 import Views1, Views2
class AIcvmaker(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.Views2 = views1.Views2(tk)
self.title("Cleopatra CV Maker")
self.geometry("1400x800")
#Add a view
Views2(self)
Views1(self).grid(sticky = (tk.E))
self.columnconfigure(0, weight=1)
root = AIcvmaker()
root.mainloop()
views1.py
from tkinter import Tk
import tkinter as tk
from tkinter import *
from tkinter import messagebox
import controller
#code edited for Views1()
class Views1(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.controller = controller
self.parent = parent
self.cv_maker_Base()
def cv_maker_Base(self):
self.create_Rightframe()
def create_Rightframe(self):
self.pad_label = ttk.Label(self, text = "Push a button")
self.activate_Button = ttk.Button(self, text = "Activate software")
self.pad_label.grid(row=0, column=1, padx = 8, pady = 8)
self.activate_Button.grid(row=1, column=1, padx = 8, pady = 8)
self.columnconfigure(1, weight = 1)
#ADDING AN EXTRA self to super()
class Views2(tk.Menu):
def __init__(self, parent):
super().__init__(self, parent)
self.parent = parent
self.create_Topmenu()
def create_Topmenu(self):
self.menu_bar = Menu(self.parent)
self.create_Filemenu()
self.create_Editmenu()
self.create_Viewmenu()
self.create_Aboutmenu()
def create_Filemenu(self):
self.filemenu = Menu(self.menu_bar, tearoff = 0)
self.filemenu.add_command(label="New", command = lambda: fNew())
self.filemenu.add_command(label="Open", command= lambda: fOpen())
self.filemenu.add_separator()
self.filemenu.add_command(label="Save", command= lambda: fSave())
self.filemenu.add_command(label="Exit", command=quit)
self.menu_bar.add_cascade(label="File", menu=self.filemenu)
def create_Editmenu(self):
pass
def create_Viewmenu(self):
pass
def create_Aboutmenu(self):
pass
def fNew(self):
pass
def fOpen(self):
pass
def fSave(self):
pass
Я попытался написать tk.Menu в методе инициализации Views2 () и попытался изменить self на parent, похоже, это не работает. Я работаю над написанием MVC, поскольку код очень длинный, и это помогло бы снизить сложность.