使用 Tkinter - Python的情绪检测器 GUI
先决条件: tkinter 简介 |使用 Vader 进行情绪分析
Python为开发 GUI(图形用户界面)提供了多种选择。在所有的 GUI 方法中,Tkinter 是最常用的方法。带有 Tkinter 的Python输出创建 GUI 应用程序的最快和最简单的方法。在本文中,我们将学习如何使用 Tkinter 创建情绪检测器 GUI 应用程序,并提供分步指南。
创建一个 tkinter :
- 导入模块 – tkinter
- 创建主窗口(容器)
- 将任意数量的小部件添加到主窗口。
- 在小部件上应用事件触发器。
GUI 如下所示:
让我们创建一个基于 GUI 的 Sentiment Detector 应用程序,它可以显示与用户给出的给定句子相关的情绪。
下面是实现:
Python3
# import SentimentIntensityAnalyzer class
# from vaderSentiment.vaderSentiment module.
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
# import all methods and classes from the tkinter
from tkinter import *
# Function for clearing the
# contents of all entry boxes
# And text area.
def clearAll() :
# deleting the content from the entry box
negativeField.delete(0, END)
neutralField.delete(0, END)
positiveField.delete(0, END)
overallField.delete(0, END)
# whole content of text area is deleted
textArea.delete(1.0, END)
# function to print sentiments
# of the sentence.
def detect_sentiment():
# get a whole input content from text box
sentence = textArea.get("1.0", "end")
# Create a SentimentIntensityAnalyzer object.
sid_obj = SentimentIntensityAnalyzer()
# polarity_scores method of SentimentIntensityAnalyzer
# object gives a sentiment dictionary.
# which contains pos, neg, neu, and compound scores.
sentiment_dict = sid_obj.polarity_scores(sentence)
string = str(sentiment_dict['neg']*100) + "% Negative"
negativeField.insert(10, string)
string = str(sentiment_dict['neu']*100) + "% Neutral"
neutralField.insert(10, string)
string = str(sentiment_dict['pos']*100) +"% Positive"
positiveField.insert(10, string)
# decide sentiment as positive, negative and neutral
if sentiment_dict['compound'] >= 0.05 :
string = "Positive"
elif sentiment_dict['compound'] <= - 0.05 :
string = "Negative"
else :
string = "Neutral"
overallField.insert(10, string)
# Driver Code
if __name__ == "__main__" :
# Create a GUI window
gui = Tk()
# Set the background colour of GUI window
gui.config(background = "light green")
# set the name of tkinter GUI window
gui.title("Sentiment Detector")
# Set the configuration of GUI window
gui.geometry("250x400")
# create a label : Enter Your Task
enterText = Label(gui, text = "Enter Your Sentence",
bg = "light green")
# create a text area for the root
# with lunida 13 font
# text area is for writing the content
textArea = Text(gui, height = 5, width = 25, font = "lucida 13")
# create a Submit Button and place into the root window
# when user press the button, the command or
# function affiliated to that button is executed
check = Button(gui, text = "Check Sentiment", fg = "Black",
bg = "Red", command = detect_sentiment)
# Create a negative : label
negative = Label(gui, text = "sentence was rated as: ",
bg = "light green")
# Create a neutral : label
neutral = Label(gui, text = "sentence was rated as: ",
bg = "light green")
# Create a positive : label
positive = Label(gui, text = "sentence was rated as: ",
bg = "light green")
# Create a overall : label
overall = Label(gui, text = "Sentence Overall Rated As: ",
bg = "light green")
# create a text entry box
negativeField = Entry(gui)
# create a text entry box
neutralField = Entry(gui)
# create a text entry box
positiveField = Entry(gui)
# create a text entry box
overallField = Entry(gui)
# create a Clear Button and place into the root window
# when user press the button, the command or
# function affiliated to that button is executed .
clear = Button(gui, text = "Clear", fg = "Black",
bg = "Red", command = clearAll)
# create a Exit Button and place into the root window
# when user press the button, the command or
# function affiliated to that button is executed .
Exit = Button(gui, text = "Exit", fg = "Black",
bg = "Red", command = exit)
# grid method is used for placing
# the widgets at respective positions
# in table like structure.
enterText.grid(row = 0, column = 2)
textArea.grid(row = 1, column = 2, padx = 10, sticky = W)
check.grid(row = 2, column = 2)
negative.grid(row = 3, column = 2)
neutral.grid(row = 5, column = 2)
positive.grid(row = 7, column = 2)
overall.grid(row = 9, column = 2)
negativeField.grid(row = 4, column = 2)
neutralField.grid(row = 6, column = 2)
positiveField.grid(row = 8, column = 2)
overallField.grid(row = 10, column = 2)
clear.grid(row = 11, column = 2)
Exit.grid(row = 12, column = 2)
# start the GUI
gui.mainloop()
输出 :