鱼C论坛

 找回密码
 立即注册
查看: 4697|回复: 15

[已解决]entry文本框怎么设置提示文字?

[复制链接]
发表于 2021-6-16 08:21:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
entry文本框怎么设置提示文字?

例如下图账号文本框中的"手机/邮箱/用户名"
最佳答案
2021-6-16 09:31:40
sunrise085 发表于 2021-6-16 08:55
好像没有很简单的方法,不过可以通过默认文本设置来实现这一功能,就是麻烦一点。
这种效果描述一下:在没 ...

你想要的是不是这样
from tkinter import *

class newEntry(Entry):
    def __init__(self, master=None, placeholder="PLACEHOLDER", color="grey"):
        super().__init__(master)

        self.placeholder = placeholder
        self.placeholder_color = color
        self.default_fg_color = self["fg"]

        self.bind("<FocusIn>", self.foc_in)
        self.bind("<FocusOut>", self.foc_out)

        self.put_placeholder()

    def put_placeholder(self):
        self.insert(0, self.placeholder)
        self["fg"] = self.placeholder_color

    def foc_in(self, *args):
        if self["fg"] == self.placeholder_color:
            self.delete("0", "end")
            self["fg"] = self.default_fg_color

    def foc_out(self, *args):
        if not self.get():
            self.put_placeholder()


root = Tk()

Label(root, text="用户名密码登录").pack()

username = newEntry(root, "手机/邮箱/用户名")
username.pack()

password = newEntry(root, "密码")
password.pack()

Button(root, text="登录").pack()

root.mainloop()
20210616081748.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-16 08:53:51 | 显示全部楼层
本帖最后由 qq1151985918 于 2021-6-16 09:32 编辑
from tkinter import *

root = Tk()

Label(root, text="用户名密码登录").pack()

username = Entry(root)
username.pack()
username.insert(0, "手机/邮箱/用户名")

password = Entry(root)
password.pack()
password.insert(0, "密码")

Button(root, text="登录").pack()

root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 08:55:10 | 显示全部楼层
本帖最后由 sunrise085 于 2021-6-16 08:57 编辑

好像没有很简单的方法,不过可以通过默认文本设置来实现这一功能,就是麻烦一点。
这种效果描述一下:在没有任何输入且未获得光标的时候,显示提示语,且字的颜色为灰色,获取光标的时候,若内容为提示语,则清空;若不是提示语,则不清空。
楼上的代码能简单的实现功能,但是效果并不太好。
若想要那种效果,那么需要添加很多代码。我现在没得时间,你自己按照上面我给的思路多试试吧。
学编程就要多思考,多动手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 09:04:15 | 显示全部楼层
sunrise085 发表于 2021-6-16 08:55
好像没有很简单的方法,不过可以通过默认文本设置来实现这一功能,就是麻烦一点。
这种效果描述一下:在没 ...

好的,多谢提供思路;
还以为文本框有这种输入提示的方法,网上找了半天找不到,原来没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 09:05:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 09:07:45 | 显示全部楼层
lengyue869 发表于 2021-6-16 09:04
好的,多谢提供思路;
还以为文本框有这种输入提示的方法,网上找了半天找不到,原来没有

完全可以重写一个 Entry 也没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 09:22:01 | 显示全部楼层
qq1151985918 发表于 2021-6-16 09:07
完全可以重写一个 Entry 也没问题的

重写entry
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 09:24:14 From FishC Mobile | 显示全部楼层
lengyue869 发表于 2021-6-16 09:22
重写entry

是啊,重写一个。几分钟就写完了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 09:31:40 | 显示全部楼层    本楼为最佳答案   
sunrise085 发表于 2021-6-16 08:55
好像没有很简单的方法,不过可以通过默认文本设置来实现这一功能,就是麻烦一点。
这种效果描述一下:在没 ...

你想要的是不是这样
from tkinter import *

class newEntry(Entry):
    def __init__(self, master=None, placeholder="PLACEHOLDER", color="grey"):
        super().__init__(master)

        self.placeholder = placeholder
        self.placeholder_color = color
        self.default_fg_color = self["fg"]

        self.bind("<FocusIn>", self.foc_in)
        self.bind("<FocusOut>", self.foc_out)

        self.put_placeholder()

    def put_placeholder(self):
        self.insert(0, self.placeholder)
        self["fg"] = self.placeholder_color

    def foc_in(self, *args):
        if self["fg"] == self.placeholder_color:
            self.delete("0", "end")
            self["fg"] = self.default_fg_color

    def foc_out(self, *args):
        if not self.get():
            self.put_placeholder()


root = Tk()

Label(root, text="用户名密码登录").pack()

username = newEntry(root, "手机/邮箱/用户名")
username.pack()

password = newEntry(root, "密码")
password.pack()

Button(root, text="登录").pack()

root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-6-16 09:42:39 | 显示全部楼层
qq1151985918 发表于 2021-6-16 09:31
你想要的是不是这样

Nice
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 09:52:29 | 显示全部楼层

Nice 还不最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 09:54:08 | 显示全部楼层
qq1151985918 发表于 2021-6-16 09:31
你想要的是不是这样

不是我想要,是楼主想要~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 10:08:49 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2021-6-16 09:24
是啊,重写一个。几分钟就写完了。

羡慕代码写的快的,我两行代码能磨蹭一天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 10:13:22 | 显示全部楼层
hrpzcf 发表于 2021-6-16 10:08
羡慕代码写的快的,我两行代码能磨蹭一天

我也很羡慕这些大佬啊说一些我听不懂的语言一定要下定决心学好编程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 11:13:22 | 显示全部楼层

newEntry没有继承Entry的其他属性跟方法啊?例如width,textvariable...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 11:26:13 | 显示全部楼层
lengyue869 发表于 2021-6-16 11:13
newEntry没有继承Entry的其他属性跟方法啊?例如width,textvariable...

有继承啊,只是用法要变一下,
username = newEntry(root, "手机/邮箱/用户名")
username["width"] = 30
username["fg"] = "red"
username.pack()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表