965-Python-Learning-Repo/Wordcloud_GUI/main.py

174 lines
7.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from PyQt5 import QtGui, uic
from PyQt5.QtWidgets import *
import tkinter as tk
from tkinter import filedialog, messagebox
import WcModule
import sys
import chardet
root = tk.Tk()
root.withdraw()
WcModule.size = 210
WcModule.maxword = 75
WcModule.font = "msyh.ttc"
WcModule.stopwords = {'1', '2'}
# noinspection PyGlobalUndefined
class mainthread:
def __init__(self):
global boot1
global boot2
global boot3
boot1 = 0
boot2 = 0
boot3 = 0
self.mainWindow = uic.loadUi('main.ui')
self.mainWindow.FileChooseButton.clicked.connect(self.Choose_File)
self.mainWindow.MaskChooseButton.clicked.connect(self.Choose_Mask)
self.mainWindow.StopWordEdit.setEchoMode(QLineEdit.Normal)
self.mainWindow.StopWordEdit.textChanged.connect(self.textChanged)
self.mainWindow.StopWordApplyButton.clicked.connect(self.Confirm_input)
self.mainWindow.FontSelectBox.addItems(['微软雅黑 R', '华文行楷 R', '楷体 R', 'Adobe 黑体 Std R', '宋体 R', '幼圆 R'])
self.mainWindow.FontSelectBox.currentIndexChanged.connect(self.selectionChange)
self.mainWindow.FontSizeSelectBox.valueChanged.connect(self.valueChange1)
self.mainWindow.MaxWordCountBox.valueChanged.connect(self.valueChange2)
self.mainWindow.GenerateButton.clicked.connect(lambda: self.Generate_Action())
# 文本选择
def Choose_File(self):
file_path = filedialog.askopenfilename()
WcModule.file = file_path
cursor = self.mainWindow.LogBrowser.textCursor()
global boot1
if file_path == "":
boot1 = 0
self.mainWindow.FilePathPreview.setText(file_path)
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:File path unselected\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
self.alert_box("输入路径为空")
else:
self.mainWindow.FilePathPreview.setText(file_path)
data = open(file=file_path, mode='rb')
result = chardet.detect(data.read())
result = result["encoding"]
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:File path selected: {file_path}\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
if "GB" in result:
boot1 = 1
WcModule.codec = "gbk"
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:File codec detected: GB2312(GBK)\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
elif "utf" in result:
boot1 = 1
WcModule.codec = "utf-8"
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:File codec detected: UTF-8\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
else:
boot1 = 0
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:File codec detection Failed\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
# 蒙版选择
def Choose_Mask(self):
mask_path = filedialog.askopenfilename()
WcModule.mask = mask_path
cursor = self.mainWindow.LogBrowser.textCursor()
global boot2
boot2 = 0
if mask_path == "":
self.mainWindow.MaskPathPreview.setText(mask_path)
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:Mask path unselected\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
self.alert_box("输入路径为空")
boot2 = 0
else:
boot2 = 1
self.mainWindow.MaskPathPreview.setText(mask_path)
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:Mask path selected: {mask_path}\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
def valueChange1(self):
font_size = 10 * self.mainWindow.FontSizeSelectBox.value()
WcModule.size = font_size
def valueChange2(self):
max_word = self.mainWindow.MaxWordCountBox.value()
WcModule.maxword = max_word
def Confirm_input(self):
cursor = self.mainWindow.LogBrowser.textCursor()
if boot3 == 0:
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:Stop words undefined\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
self.alert_box("无输入")
else:
inp = str(input_words)
inp = inp.replace('', ',')
inp = inp.split(',')
WcModule.stopwords = set(inp)
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:Stop words: {set(inp)}\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
@staticmethod
def textChanged(text):
global input_words
global boot3
boot3 = 1
input_words = None
input_words = text
@staticmethod
def selectionChange(i):
WcModule.font = fontlist[i]
@staticmethod
def alert_box(str1):
a = messagebox.showerror('Error', str1)
print(a)
def Generate_Action(self):
cursor = self.mainWindow.LogBrowser.textCursor()
if boot1 + boot2 == 2:
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(
f"[Sys]:Parameters: {WcModule.size, WcModule.maxword, WcModule.font, WcModule.file, WcModule.mask, WcModule.stopwords, WcModule.codec}\n")
cursor.insertText(f"[Sys]:Generating.....\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
WcModule.generate(WcModule.size, WcModule.maxword, WcModule.font, WcModule.file, WcModule.mask, WcModule.stopwords, WcModule.codec)
else:
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(f"[Sys]:Parameter missing\n")
self.mainWindow.LogBrowser.setTextCursor(cursor)
self.mainWindow.LogBrowser.ensureCursorVisible()
self.alert_box("缺少必要参数")
fontlist = ("msyh.ttc", "STXINGKA.TTF", "simkai.ttf", "AdobeHeitiStd-Regular.otf", "simsun.ttc", "SIMYOU.TTF")
if __name__ == '__main__':
app = QApplication(sys.argv)
m_main = mainthread()
m_main.mainWindow.show()
app.exec_()