这是本人在大二上学期python程序设计的一个期末作业,然后现在发布到网上进行分享,如果各位大佬有什么完善优化的建议可以评论区留言!万分感谢!
本次python实验期末作业我利用课堂所学内容和课外所接触的新知识制作一个“词云定制器”的系统。
通过该词云定制器系统,在可视化界面中菜单栏的下拉框进行预览和选取自己喜欢的定制的词云logo类型,其次同样在菜单中选取自己喜欢的小说,选取小说之后就会自动生成我们刚才所定制的词云图,定制多张词云图后,还可以在菜单中选中显示所生成的词云图,之后将会把我们刚才所定制了多少张词云图显示在弹窗的文本框之中,并且有对应的logo词云图名称,方便我们的查找,再者若想找到我们特定某张词云图时可以点击弹窗的显示图片按钮,就会显示出我们刚才所设计的所有词云图,在我们查看设计的词云图时,也许会感觉某一张图片我们不是特别地喜欢,这个时候我们就可以点击弹窗的删除按钮,根据提示要求,输入我们想要删除的词云图名称,然后进行删除操作。
话不多说上代码
import tkinter as tk
from tkinter import *
from PIL import Image, ImageTk
import numpy as np
import wordcloud
import matplotlib.pyplot as plt
import PIL
import jieba
from matplotlib import colors
from os import listdir
import os
from tkinter import messagebox
class Window(Frame):
type_logo_name=""
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("词云定制器")
self.pack(fill=BOTH, expand=1)
menu = Menu(self.master)
self.master.config(menu=menu)
load = Image.open(r'd:\abc.png')
render = ImageTk.PhotoImage(load)
img0 = Label(self, image=render)
img0.image = render
img0.place(x=0, y=0)
a = Menu(menu)
a.add_command(label='白夜行',command=self.typechange1)
a.add_command(label='放学后',command=self.typechange2)
a.add_command(label='红楼梦',command=self.typechange3)
a.add_command(label='活着',command=self.typechange4)
a.add_command(label='解忧杂货铺',command=self.typechange5)
a.add_command(label='罗生门',command=self.typechange6)
a.add_command(label='平凡的世界',command=self.typechange7)
a.add_command(label='人间失格',command=self.typechange8)
a.add_command(label='射雕英雄传',command=self.typechange9)
a.add_command(label='水浒传',command=self.typechange10)
a.add_command(label='天龙八部',command=self.typechange11)
a.add_command(label='围城',command=self.typechange12)
a.add_command(label='西游记',command=self.typechange13)
a.add_command(label='嫌疑人X的献身',command=self.typechange14)
menu.add_cascade(label='词云文本', menu=a)
b = Menu(menu)
b.add_command(label='Palace_logo', command=self.showlogoImg1)
b.add_command(label='Adidas_logo', command=self.showlogoImg2)
b.add_command(label='Bape_logo', command=self.showlogoImg3)
b.add_command(label='Champion_logo', command=self.showlogoImg4)
b.add_command(label='Converse_logo', command=self.showlogoImg5)
b.add_command(label='Dickies_logo', command=self.showlogoImg6)
b.add_command(label='Jordan_logo', command=self.showlogoImg7)
b.add_command(label='New balance_logo', command=self.showlogoImg8)
b.add_command(label='Nike_logo', command=self.showlogoImg9)
b.add_command(label='TheNorthFace_logo', command=self.showlogoImg10)
b.add_command(label='Puma_logo', command=self.showlogoImg11)
b.add_command(label='Supreme_logo', command=self.showlogoImg12)
b.add_command(label='Vans_logo', command=self.showlogoImg13)
b.add_command(label='UA_logo', command=self.showlogoImg14)
b.add_command(label='FILA_logo', command=self.showlogoImg15)
b.add_command(label='Stussy_logo', command=self.showlogoImg16)
menu.add_cascade(label='词云形状类型', menu=b)
c = Menu(menu)
c.add_command(label='显示已生成的所有词云图', command=self.showlist)
menu.add_cascade(label='生成的词云图', menu=c)
#展示logo图片的方法
def showlogoImg1(self):
load = Image.open(r'D:\词云logo\Palace.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\Palace.png'
def showlogoImg2(self):
load = Image.open(r'D:\词云logo\阿迪达斯.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name=r'D:\词云logo\阿迪达斯.png'
def showlogoImg3(self):
load = Image.open(r'D:\词云logo\BAPE.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\BAPE.png'
def showlogoImg4(self):
load = Image.open(r'D:\词云logo\Champion.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\Champion.png'
def showlogoImg5(self):
load = Image.open(r'D:\词云logo\Converse.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\Converse.png'
def showlogoImg6(self):
load = Image.open(r'D:\词云logo\dickies.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\dickies.png'
def showlogoImg7(self):
load = Image.open(r'D:\词云logo\Jordan.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\Jordan.png'
def showlogoImg8(self):
load = Image.open(r'D:\词云logo\new balance.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\new balance.png'
def showlogoImg9(self):
load = Image.open(r'D:\词云logo\nike.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\nike.png'
def showlogoImg10(self):
load = Image.open(r'D:\词云logo\TheNorthFace.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\TheNorthFace.png'
def showlogoImg11(self):
load = Image.open(r'D:\词云logo\puma.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\puma.png'
def showlogoImg12(self):
load = Image.open(r'D:\词云logo\Supreme.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\Supreme.png'
def showlogoImg13(self):
load = Image.open(r'D:\词云logo\Vans.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\Vans.png'
def showlogoImg14(self):
load = Image.open(r'D:\词云logo\安德玛.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\安德玛.png'
def showlogoImg15(self):
load = Image.open(r'D:\词云logo\斐乐.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\斐乐.png'
def showlogoImg16(self):
load = Image.open(r'D:\词云logo\斯图西.png')
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=155, y=155)
global type_logo_name
type_logo_name = r'D:\词云logo\斯图西.png'
#将所选文本转化成词云的方法
def typechange1(self):
content = open("D:\词云文本\白夜行.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange2(self):
content = open("D:\词云文本\放学后.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange2(self):
content = open("D:\词云文本\放学后.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global tpye_logo_name
image = PIL.Image.open(tpye_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF", "#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.show()
def typechange3(self):
content = open("D:\词云文本\红楼梦.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange4(self):
content = open("D:\词云文本\活着.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange5(self):
content = open("D:\词云文本\解忧杂货铺.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange6(self):
content = open("D:\词云文本\罗生门.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange7(self):
content = open("D:\词云文本\平凡的世界.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹'+"/"+type_logo_name[10:-4]+"词云图.jpg")
plt.show()
def typechange8(self):
content = open("D:\词云文本\人间失格.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange9(self):
content = open("D:\词云文本\射雕英雄传.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange10(self):
content = open("D:\词云文本\水浒传.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange11(self):
content = open("D:\词云文本\天龙八部.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange12(self):
content = open("D:\词云文本\围城.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange13(self):
content = open("D:\词云文本\西游记.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def typechange14(self):
content = open("D:\词云文本\嫌疑人X的献身.txt", "r", encoding="utf-8").read() # 读取文本文件
cut_list = jieba.cut(content) # 分词
target_content = " ".join(cut_list) # 将列表转为字符串,并以空格隔开
global type_logo_name
image = PIL.Image.open(type_logo_name) # 加载图片
MASK = np.array(image) # 将图片转化为数组
# 设置词云对象
color = ["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF","#8B00FF"]
colormap = colors.ListedColormap(color)
WC = wordcloud.WordCloud(
font_path=r'C:\Windows\Fonts\msyh.ttc', # 微软雅黑字体路径 C:\Windows\Fonts\msyh.ttc
max_words=2000,
mask=MASK,
height=1000,
width=1000,
background_color='#F5F5F5',
repeat=False,
mode='RGBA',
colormap=colormap
)
# 生成词云图片
wc_image = WC.generate(target_content)
plt.imshow(wc_image)
plt.axis('off')
plt.savefig('D:/词云保存文件夹' + "/" + type_logo_name[10:-4] + "词云图.jpg")
plt.show()
def showlist(self):
window = tk.Toplevel()
window.title('已经设计的词云图')
window.geometry('800x400')
photo = tk.PhotoImage(file=r"d:\def.png")
label = tk.Label(window, image=photo) # 图片
label.pack()
bu1 = tk.Button(window, text="删除图片", width=9,
background="#1E90FF",foreground="white",
activebackground="red",
font=('黑体', 11, 'bold'),
height=2,command=self.deliteaction)
bu1.place(x=250,y=300)
bu2 = tk.Button(window, text="显示图片", width=9,
background="#1E90FF", foreground="white",
activebackground="red",
font=('黑体', 11, 'bold'),
height=2,command=self.updateaction)
bu2.place(x=400, y=300)
txt=tk.Text(window,width=80, height=15,
foreground="white",
font=('宋体', 10, 'bold'),
background="#d27ab7")
for i in range(len(listdir('D:/词云保存文件夹'))):
txt.insert(END,listdir('D:/词云保存文件夹')[i])
txt.insert(END,"\n")
txt.place(x=35,y=80)
window.mainloop()
def deliteaction(self):
while(True):
n = input("请输入你要删除的词云名称:")
file_path = "D:/词云保存文件夹/" + n
if(os.path.exists(file_path)):
flag=messagebox.askokcancel('提示', '要执行此操作吗')
if(flag):
os.remove(file_path)
messagebox.showinfo('提示', "词云图已经删除")
break
else:
messagebox.showinfo('提示', "操作取消成功")
break
else:
messagebox.showerror("提示",'词云图不存在,请重新输入')
def updateaction(self):
os.system("start explorer D:\词云保存文件夹")
root = Tk()
root.geometry("800x700")
app = Window(root)
root.mainloop()
具体实现后可视化界面如图所示
起始界面
小说菜单
生成词云图
对于已生成图片的删除操作
该生成器各核心知识的叙述
- 对于实现基本的输入与输出操作的要求;在弹窗中点击输入“删除图片”按钮,将会在终端下方,引导我们进行基本输入操作,而基本的输出操作在整个系统运作中均有体现,例如弹窗中文本框的内容显示等等。
- 对于实现处理异常,保证程序的健壮性的要求;在创建系统的可视乎窗口时,出于为了让界面更加美观,导致很多组件都要独立出来进行设计,但是一旦某个组件出现异常,将会导致整个可视乎界面无法展示,所以我在创建菜单、文本框、按钮、窗体等等一系列组件时候,我都有使用try-except语句进行插入,这样可以保证整体的系统界面不会因为某个组件的异常,而导致整个界面无法显示,并且except的内容里面添加print语句,这样就可以清晰地知道哪个组件出现异常,从而可以快速地进行调整和修改。
- 对于实现代码的复用性的要求;我在设计该系统代码时,碰到了一个问题,就是当我们设计窗口时,想要将自己的图片设计成弹窗背景时,可以使用tkinter的photoimage方法,但是这个方法有个问题就是只能使用一次,而如果不使用这个方法,想要多次实现自定义窗口背景,此时就要使用标签组件,将图片导入标签,然后根据窗口调整标签的大小形状等等,过程和代码都十分复杂,所以通过查阅资料使用Toplevel方法可以进行photoimage的再次使用,除此之外在整个系统代码中也有使用global来体现全局变量的知识,省去了定义多个变量名称的操作。
- 对于实现处理的数据要能够保存在文件中便于查看的要求;当通过本词云定制器生成一张词云图时,将会自动保存在我先前创建好的路径 “D:\词云保存文件夹”中,以便我们之后实现对于词云图的查找和删除工作。
可能会由于我说明不够详细所以我将附上该项目的演示视频供各位参考------详见我的主页上传的资源谢谢!