Tkinter滚动文本

时间:2019-12-14 10:51:49

标签: python tkinter alignment chatbot

我正在尝试将用户输入的右侧(使用tkinter python)对齐到scrolledtext中,并将聊天机器人的输出对齐到左侧,但没有成功。 文本背景也应具有浅色。我的意思是,它应该看起来像Messenger或其他消息传递平台,双方都有不同的方面,有时甚至是颜色。 请帮助我,这是我最后一年项目的一部分。 我很担心。 这是我的代码:

from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
import os
import tkinter as tk
try:
    import ttk as ttk
    import ScrolledText
except ImportError:
    import tkinter.ttk as ttk
    import tkinter.scrolledtext as ScrolledText
import time


class TkinterGUIExample(tk.Tk):

    def __init__(self, *args, **kwargs):
        """
        Create & set window variables.
        """
        tk.Tk.__init__(self, *args, **kwargs)

        self.chatbot = ChatBot(
            "GUI Bot",
            storage_adapter="chatterbot.storage.SQLStorageAdapter",
            logic_adapters=[{
                'import_path': 'chatterbot.logic.BestMatch',
                'default_response': 'I am sorry, but I do not understand.',
                'maximum_similarity_threshold': 1.0
} ]
        )


        for files in os.listdir('C:/Users/HP/Desktop/FYP BOT/training_data/'):
            con=open('C:/Users/HP/Desktop/FYP BOT/training_data/'+files,'r').readlines()
            trainer = ListTrainer(self.chatbot)
            trainer.train(con)
        self.title("Chatterbot")

        self.initialize()

    def initialize(self):
        """
        Set window layout.
        """
        self.grid()

        ttk.Style().configure("TButton", padding=6, relief="flat",background="#ccc")
        style = ttk.Style()
        style.map("C.TButton",
            foreground=[('pressed', 'red'), ('active', 'blue')],
            background=[('pressed', '!disabled', 'black'), ('active', 'white')]
            )


        self.respond = ttk.Button(self, text='Get Response', command=self.get_response,style="C.TButton")
        self.respond.grid(column=1, row=2, sticky='nesw', padx=3, pady=10)


        self.usr_input = tk.Entry(self, state='normal',text='Enter your query here!')
        self.usr_input.grid(column=0, row=2, sticky='nesw', padx=1, pady=5)


        self.conversation_lbl = tk.Label(self, anchor=tk.E, text='Conversation',font=('Arial Bold Underline',18),bg="#f89406",fg="#feffff")
        self.conversation_lbl.grid(column=0, row=0,columnspan=2, padx=3, pady=3)

        self.conversation = ScrolledText.ScrolledText(self,
                                                      state='disabled',borderwidth=5,
                                                      highlightthickness=1,
                                                      bg='#15202b',fg='#ffffff',
                                                      font=('Arial Bold',8))
        self.conversation.grid(column=0, row=1, columnspan=2, sticky='nesw', padx=3, pady=3)


    def get_response(self):
        """
        Get a response from the chatbot and display it.
        """
        user_input = self.usr_input.get()
        self.usr_input.delete(0, tk.END)

        response = self.chatbot.get_response(user_input)

        self.conversation['state'] = 'normal'
        self.conversation.insert(
            tk.END, "Human: " + user_input + "\n" + "ChatBot: " + str(response.text) + "\n"
        )
        self.conversation['state'] = 'disabled'

        time.sleep(0.5)


gui_example = TkinterGUIExample()
gui_example.geometry('930x600+10+10')
gui_example.configure(background='#3a8fc5')
gui_example.mainloop()

1 个答案:

答案 0 :(得分:1)

您可以使用def front_back(str): ind=len(str)-1 newstring=str.replace(str[0],str[ind]) newerstring=newstring.replace(newstring[ind],str[0]) return newerstring 将属性分配给部分文本。

使用tags可以在右侧显示文本,但是所有行都将在右侧对齐。

justify

enter image description here

为了更好地控制,您可以尝试将import tkinter as tk import tkinter.scrolledtext as ScrolledText root = tk.Tk() #text_widget = tk.Text() text_widget = ScrolledText.ScrolledText() text_widget.pack(fill='both', expand=True) text_widget.tag_configure('tag-center', justify='center') text_widget.tag_configure('tag-left', justify='left') text_widget.tag_configure('tag-right', justify='right') text_widget.insert('end', 'Hello\nWorld!!!\n', 'tag-center') text_widget.insert('end', 'Hello\nWorld!!!\n', 'tag-left') text_widget.insert('end', 'Hello\nWorld!!!\n', 'tag-right') root.mainloop() CanvasLabels一起使用


编辑:使用Scrollbar可以将window_create添加到Label,使用先前的标记可以将其向右移动。然后,您可以更改ScrolledText-颜色,边距(padx,pady)等。您可以尝试向Label添加图片,甚至添加Label来放置更多不同的小部件。

Frame

enter image description here