В моей программе недостаточно памяти.С консольным вариантом все в порядке.
Я написал программу для генерирования слов из букв и количества букв в слове.Когда слово имеет длину 6 букв или менее, все в порядке, но когда я использую 7 или более символов, я получаю ошибку памяти.
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import askyesno
from os import popen
import nltk
import itertools
from collections import defaultdict
import threading
class Main_Window(object):
def __init__(self):
super().__init__()
self.window_width = 640
self.window_hight = 480
def Close(*args):
for i in args:
i.destroy()
def Ask_To_Destroy():
if askyesno('Closing Program', 'Are you sure you want to close the program?'):
Close(self.root)
def center(win):
win.update_idletasks()
width = win.winfo_width()
height = win.winfo_height()
x = (win.winfo_screenwidth() // 2) - (width // 2)
y = (win.winfo_screenheight() // 2) - (height // 2)
win.geometry('{}x{}+{}+{}'.format(width, height, x, y))
def dictionary(inpt):
result = defaultdict(list)
for word in inpt:
result[word[:5]].append(word)
return result
def thread_call():
t=threading.Thread(target=search)
t.start()
def search():
if self.symbols.get().isalpha() and self.number_of_symbols.get().isdecimal():
self.output_widget.config(state='normal')
self.output_widget.delete('1.0','end')
for i in [''.join(i) for i in itertools.permutations(list(self.symbols.get().lower()), int(self.number_of_symbols.get()))]:
if i in self.words[i[:5]]:
self.output_widget.insert('end',i+'\n')
self.output_widget.config(state='disabled')
self.root = tk.Tk()
self.root.protocol("WM_DELETE_WINDOW", Ask_To_Destroy)
self.root.title('Word Generator')
self.root.minsize(self.window_width, self.window_hight)
self.words=dictionary([i.lower() for i in nltk.corpus.brown.words()])
self.symbols = tk.StringVar()
self.number_of_symbols = tk.StringVar()
self.main_frame = ttk.Frame(self.root)
self.main_frame.pack(fill='both', expand=True)
self.enter_symols_frame = ttk.Frame(self.main_frame)
self.enter_symols_frame.pack(fill='both', expand=True)
self.symbols_label = ttk.Label(self.enter_symols_frame,text='Enter symbols: ')
self.symbols_label.pack(side='left')
self.symbols_entry = ttk.Entry(self.enter_symols_frame,textvariable=self.symbols)
self.symbols_entry.pack(side='left',fill='x', expand=True)
self.enter_number_of_symbols_frame = ttk.Frame(self.main_frame)
self.enter_number_of_symbols_frame.pack(fill='both', expand=True)
self.number_of_symbols_label = ttk.Label(self.enter_number_of_symbols_frame,text='Enter symbols: ')
self.number_of_symbols_label.pack(side='left')
self.number_of_symbols_entry = ttk.Entry(self.enter_number_of_symbols_frame,textvariable=self.number_of_symbols)
self.number_of_symbols_entry.pack(side='left',fill='x', expand=True)
self.search_button = ttk.Button(self.main_frame,text='Search',command=thread_call)
self.search_button.pack()
self.output_widget = tk.Text(self.main_frame, state = 'disabled')
self.output_widget.pack(fill='both', expand=True)
center(self.root)
self.root.mainloop()
Main_Window()
Как я могу решить эту проблему?