为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 tkinter 中用标签覆盖输入字段?

是否可以在 tkinter 中用标签覆盖输入字段?

慕丝7291255 2022-10-06 16:47:49
我有一个简单的标签和输入字段,它将:1)创建一个静态标签并在单击确认按钮后清除输入字段 2)在单击重置按钮后清除静态标签有没有办法在确认点击时用用户输入的静态标签覆盖输入字段,而不是创建新的静态标签?并在重置点击时用空输入字段覆盖静态标签?提前感谢您的帮助。from tkinter import *root = Tk()frame1 = Frame(root)frame1.pack()def reset():     set_cname.destroy()     cbtn['state'] = NORMALdef confirm():    global set_cname    text1="Customer Name: " + entry1.get()    set_cname = Label(frame1, text=text1)    set_cname.grid(row=3, column=0, columnspan=1)    entry1.delete(0, 'end')    cbtn['state'] = DISABLEDcname = Label(frame1, text="Customer Name: ").grid(padx=5, pady=5, columnspan=2, sticky=W)entry1 = Entry(frame1)entry1.grid(row=0, column=2, padx=5)cbtn = Button(frame1, text="Confirm", command=confirm, width=20)cbtn.grid(row=1, column=4, padx=5, pady=5)rbtn = Button(frame1, text="Reset Names", command=reset, width=20)rbtn.grid(row=2, column=4, padx=5, pady=5)root.mainloop()
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

pack()您可以通过首先创建两者然后使用在它们之间切换来将条目替换为标签。诀窍是不要让它们的不同大小影响应用程序布局,这可以通过禁用大小传播来实现。


在我的示例中,我创建了一个entry_frame具有固定大小的新框架 (),然后禁用大小传播 ( .pack_propagate(False))。然后我使用这个新框架来包含条目/标签。我给entry_framebg 颜色卡其色让您确切地看到它在哪里。


我也摆弄了一下列号。


from tkinter import *


root = Tk()

frame1 = Frame(root)

frame1.pack()


def reset():

     text_label.pack_forget()

     entry1.pack()

     cbtn['state'] = NORMAL


def confirm():

    global set_cname

    entry1.pack_forget()

    text_label.config(text=entry1.get())

    text_label.pack(side='left')

    entry1.delete(0, 'end')

    cbtn['state'] = DISABLED


cname = Label(frame1, text="Customer Name: ")

cname.grid(row=0, column=0, padx=5, pady=5, sticky=W)


entry_frame = Frame(frame1, width=130, height=20, bg='khaki')

entry_frame.grid(row=0, column=1, padx=5, pady=5, sticky='nsew')

entry_frame.pack_propagate(False)   # Disable size propagation

entry1 = Entry(entry_frame)         # Customer name entry

entry1.pack()

text_label = Label(entry_frame)     # Label to hold customer name


cbtn = Button(frame1, text="Confirm", command=confirm, width=20)

cbtn.grid(row=1, column=2, padx=5, pady=5)


rbtn = Button(frame1, text="Reset Names", command=reset, width=20)

rbtn.grid(row=2, column=2, padx=5, pady=5)


root.mainloop()

请注意,此解决方案将对字体大小更改敏感。


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信