You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:52:28