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

如何在Tkinter中为Label添加下划线并实现重复输入内容多行显示

解决Tkinter Label下划线与多行重复输入显示的问题

咱们来逐个搞定你的两个需求:给Label加上下划线样式,以及实现重复输入时内容自动换行显示。我会基于你的代码做针对性修改,一步步说明调整思路。

一、给Label添加下划线样式

Tkinter的Label组件有两种常用的下划线实现方式:

  • 全局文本下划线:直接在font参数里追加"underline",让整个Label文本都带下划线,比如:
    Name_label = Label(window, text="Name", bg="#09B683", font=("Bold", 12, "underline"))
    
  • 指定字符下划线:如果只需要给文本中某几个字符加下划线,可以用underline参数指定字符索引(从0开始),比如只给"Name"的首字母加下划线:
    Name_label = Label(window, text="Name", bg="#09B683", font=("Bold", 12), underline=0)
    

二、实现重复输入内容的多行显示

你的原代码里有几个小问题导致无法实现多行效果:

  1. Name_entry等输入框是ID_buttons函数的局部变量,add_records函数访问不到
  2. 变量a的作用域不对,函数内修改全局变量需要声明global
  3. 你之前修改的是x坐标,应该递增y坐标才能实现换行

下面是修改后的完整代码,关键改动我都标出来了:

from tkinter import Tk, Label, Entry, Button

window = Tk()
window.geometry("850x550")

# 全局变量:存储输入框控件和当前显示的行位置
Name_entry = None
Number_entry = None
Email_Entry = None
Gender_Entry = None
Date_of_birth_entry = None
current_y = 400  # 初始显示位置的y坐标

first_color = Label(window, bg="#09B683", padx=120, pady=999)
second_color = Label(window, bg="#21FF99", padx=100, pady=999)
Label(window, bg="#19ff04", padx=1000, pady=11).place(x=0, y=10)
Label(window, bg="#19ff04", text="SCHOOL MANAGEMENT SYSTEM", font=("BOLD", 15)).place(x=240, y=15)
first_color.place(x=0, y=50)
second_color.place(x=200, y=50)

def ID_buttons():
    global Name_entry, Number_entry, Email_Entry, Gender_Entry, Date_of_birth_entry
    # 给输入提示Label添加下划线
    Name_label = Label(window, text="Name", bg="#09B683", font=("Bold", 12, "underline"))
    Name_label.place(x=67, y=70)
    Name_entry = Entry(window, width=20, borderwidth=1)
    Name_entry.place(x=34, y=95)
    
    Number_label = Label(window, text="Contact Number", bg="#09B683", font=("Bold", 12, "underline"))
    Number_label.place(x=38, y=130)
    Number_entry = Entry(window, width=20, borderwidth=1)
    Number_entry.place(x=34, y=155)
    
    Email_Label = Label(window, text="Email Address", bg="#09B683", font=("Bold", 12, "underline"))
    Email_Label.place(x=38, y=190)
    Email_Entry = Entry(window, width=20, borderwidth=1)
    Email_Entry.place(x=34, y=215)
    
    Gender_label = Label(window, text="Gender", bg="#09B683", font=("Bold", 12, "underline"))
    Gender_label.place(x=63, y=245)
    Gender_Entry = Entry(window, width=20, borderwidth=1)
    Gender_Entry.place(x=34, y=270)
    
    Date_of_birth_ = Label(window, text="Date of Birth", bg="#09B683", font=("Bold", 12, "underline"))
    Date_of_birth_.place(x=48, y=295)
    Date_of_birth_entry = Entry(window, width=20, borderwidth=1)
    Date_of_birth_entry.place(x=34, y=323)

def add_records():
    global current_y
    # 获取输入的名称,非空才添加
    name = Name_entry.get()
    if name:
        # 创建带下划线的记录Label
        info_label = Label(window, text=name, font=("Bold", 10, "underline"))
        info_label.place(x=440, y=current_y)
        # 每次添加后y坐标递增,实现换行(数值可根据字体大小调整)
        current_y += 20

add_record = Button(window, text="Add Record", padx=64, pady=8, command=add_records)
add_record.place(x=1, y=370)

# 表头也添加下划线
ID = Label(window, text="ID | Name | Email ID | Gender | Date Of Birth", font=("Bold", 10, "underline"))
ID.place(x=405, y=60)

ID_buttons()
window.mainloop()

关键改动说明:

  1. 全局变量声明:把输入框和行位置变量设为全局,让add_records能访问到输入内容和控制显示位置
  2. 下划线样式应用:给所有需要的Label(提示文本、表头、记录)都加上了下划线样式
  3. 多行显示逻辑:用current_y记录当前行的y坐标,每次添加记录后递增这个值,让新Label自动显示在上一条的下方
  4. 非空判断:避免空输入时添加空Label,优化体验

如果需要显示完整的记录(比如名称+邮箱+性别),可以把内容拼接成一个字符串,比如:

record_text = f"{Name_entry.get()} | {Email_Entry.get()} | {Gender_Entry.get()}"
info_label = Label(window, text=record_text, font=("Bold", 10, "underline"))

这样就能同时实现Label下划线和重复输入多行显示的需求啦!

内容的提问来源于stack exchange,提问作者user19164169

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:12:35