如何在tkinter python中动态添加多行文本?

时间:2018-11-29 14:22:50

标签: python tkinter

我创建了一个聊天应用程序,在其中我使用ListBox显示了聊天记录。在我输入超出屏幕的长刺之前,它看起来不错。有没有一种方法可以断开字符串并以换行显示,或者以其他任何方式显示完整的字符串。我是Tkinter的新手,我不知道有多少可用的小部件。

这是我的示例代码

from tkinter import *

class Actions:
    def chatUpdate(chat):
        chatlist.insert(Actions.chatLast,chat)
        Actions.chatLast=Actions.chatLast+1
        chatlist.pack( side=LEFT, fill=BOTH)
        chatBox.config(command=chatlist.yview)


def callUpdater():
    txt=textBox.get()
    text_text.set("")
    Actions.chatUpdate(txt)


root = Tk()
root.title("Chat App")
frame1 = Frame(root, bd=4)
frame1.pack(side=TOP)

frame2 = Frame(root, bd=4)
frame2.pack(side=TOP)

frame3 = Frame(root, bd=4)
frame3.pack(side=TOP)

# chat box
chatBox = Scrollbar(frame1)
chatBox.pack(side=RIGHT, fill=Y)
chatlist = Listbox(frame1, yscrollcommand = chatBox.set, width=50)
Actions.chatLast=0
Actions.chatUpdate("                        ")

# text box
textView = Label(frame2, text="Input: ")
textView.pack(side=LEFT)
text_text = StringVar()
textBox = Entry(frame2, textvariable=text_text, bd=0, width=40, bg="pink")
textBox.pack(side=RIGHT)

# send button
button = Button(frame3, text="Send", fg="black", command=callUpdater)
button.pack(side=TOP)
root.mainloop()

1 个答案:

答案 0 :(得分:0)

您可以在“禁用”模式下用Listbox小部件替换Text,该模式会自动换行。每次插入文本时,您只需要将小部件放回“正常”模式:

from tkinter import *

def callUpdater():
    text = textBox.get()
    textBox.delete(0, 'end')
    chat.configure(state='normal')
    chat.insert('end', text + '\n')
    chat.configure(state='disabled')

root = Tk()
chatBox = Scrollbar(root)
chat = Text(root, wrap='word', state='disabled', width=50,
            yscrollcommand=chatBox.set)
chatBox.configure(command=chat.yview)

chat.grid(row=0, columnspan=2, sticky='ewns')
chatBox.grid(row=0, column=2, sticky='ns')
Label(root, text="Input: ").grid(row=1, column=0)

textBox = Entry(root, bd=0, width=40, bg="pink")
textBox.grid(row=1, column=1)

Button(root, text="Send", command=callUpdater).grid(row=2, columnspan=2)
root.mainloop()

顺便说一下,ListboxText小部件都支持索引“ end”,因此您不必跟踪插入的行数。