使用Grid布局时如何调整Tkinter Entry高度并实现文本自动换行?
解决Tkinter Entry无法多行输入自动换行的问题
哦,这个问题我之前也踩过坑!Tkinter里的Entry组件本质就是单行输入控件,所以哪怕你用ipady参数把它的高度拉高,它还是只能支持单行输入,文字只会在中间一行显示,根本没法自动换行。
要实现多行输入+自动换行的需求,你应该用Text组件来替代Entry,这才是Tkinter专门用来处理多行文本输入的控件。
修改后的代码示例
我把你原代码里的messageEntry部分替换成了Text组件,还做了一些适配性调整:
def sendMail(senderEmail, senderPassword): global server sendMailFont = ['Consolas', 10] sendMailWindow = Tk() sendMailWindow.title("Sendmail") sendMailWindow.resizable(False, False) sendMailWindow.focus_force() # sendMailWindow.iconbitmap('info icon.ico') sendMailWindow.config(bg = "#DCDCDC") loggedInLabel = Label(sendMailWindow, font = (sendMailFont), text = "Logged in as {}".format(senderEmail), bg = "#DCDCDC") loggedInLabel.grid(row = 0, column = 0) subjectLabel = Label(sendMailWindow, font = (sendMailFont), text = "Subject", bg = "#DCDCDC") subjectLabel.grid(row = 2, column = 0, sticky = "w") subjectEntry = Entry(sendMailWindow, font = (sendMailFont), bg = "#FFFFFF", width = 37) subjectEntry.grid(row = 3, column = 0, sticky = "w", ipady = 2) messageLabel = Label(sendMailWindow, font = (sendMailFont), text = "Message", bg = "#DCDCDC") messageLabel.grid(row = 5, column = 0, sticky = "w") # 替换Entry为Text组件,实现多行输入和自动换行 messageText = Text(sendMailWindow, font = (sendMailFont), bg = "#FFFFFF", width = 35, height = 8, wrap="word") messageText.grid(row = 6, column = 0, sticky = "w") hiddenLabel = Label(sendMailWindow, font = ('Consolas', 1), text = "", bg = "#DCDCDC") hiddenLabel.grid(row = 1, column = 0, sticky = "we") hiddenLabel = Label(sendMailWindow, font = ('Consolas', 10), text = "", bg = "#DCDCDC") hiddenLabel.grid(row = 4, column = 0, sticky = "we") sendMailWindow.mainloop()
关键修改点说明
- 替换控件类型:把
Entry换成Text,Text天生支持多行输入。 - 设置高度:用
height参数控制显示的行数(这里设为8行),比ipady更直观。 - 自动换行:添加
wrap="word"参数,实现按单词自动换行(如果想按字符换行可以用wrap="char")。 - 获取内容:如果之后需要获取输入的消息内容,要改用
messageText.get("1.0", END),而不是Entry的get()方法。
这样修改后,用户就能在消息输入框里输入多行文本,并且内容会自动换行显示啦!
内容的提问来源于stack exchange,提问作者Andrej
相关产品推荐
相关产品推荐

