首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以用tkinter中的标签覆盖输入字段吗?

问可以用tkinter中的标签覆盖输入字段吗?
EN

Stack Overflow用户
提问于 2020-04-13 13:33:28
回答 1查看 44关注 0票数 0

我有一个简单的标签和输入字段,将: 1)创建一个静态标签,并清除确认按钮点击后的输入字段2)清除复位按钮点击后的静态标签

有没有办法在确认点击时用用户输入的静态标签覆盖输入字段,而不是创建新的静态标签?并在重置点击时用空的输入字段覆盖静态标签?

提前感谢您的帮助。

代码语言:javascript
复制
from tkinter import *

root = Tk()
frame1 = Frame(root)
frame1.pack()


def reset():
     set_cname.destroy()
     cbtn['state'] = NORMAL

def 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'] = DISABLED


cname = 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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 14:24:19

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

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

我还在列号上做了一些改动。

代码语言:javascript
复制
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()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61182073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档