lengyue869 发表于 2021-6-16 08:21:31

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

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

例如下图账号文本框中的"手机/邮箱/用户名"

qq1151985918 发表于 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()

sunrise085 发表于 2021-6-16 08:55:10

本帖最后由 sunrise085 于 2021-6-16 08:57 编辑

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

lengyue869 发表于 2021-6-16 09:04:15

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

好的,多谢提供思路;
还以为文本框有这种输入提示的方法,网上找了半天找不到,原来没有{:5_100:}

lengyue869 发表于 2021-6-16 09:05:20

qq1151985918 发表于 2021-6-16 08:53


感谢!{:5_109:}

qq1151985918 发表于 2021-6-16 09:07:45

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

完全可以重写一个 Entry 也没问题的

lengyue869 发表于 2021-6-16 09:22:01

qq1151985918 发表于 2021-6-16 09:07
完全可以重写一个 Entry 也没问题的

重写entry{:9_241:}

qq1151985918 发表于 2021-6-16 09:24:14

lengyue869 发表于 2021-6-16 09:22
重写entry

是啊,重写一个。几分钟就写完了。

qq1151985918 发表于 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()

lengyue869 发表于 2021-6-16 09:42:39

qq1151985918 发表于 2021-6-16 09:31
你想要的是不是这样

Nice{:5_106:}

qq1151985918 发表于 2021-6-16 09:52:29

lengyue869 发表于 2021-6-16 09:42
Nice

Nice 还不最佳

sunrise085 发表于 2021-6-16 09:54:08

qq1151985918 发表于 2021-6-16 09:31
你想要的是不是这样

不是我想要,是楼主想要~~
{:5_97:}

hrpzcf 发表于 2021-6-16 10:08:49

qq1151985918 发表于 2021-6-16 09:24
是啊,重写一个。几分钟就写完了。

羡慕代码写的快的,我两行代码能磨蹭一天{:10_258:}

Gacy 发表于 2021-6-16 10:13:22

hrpzcf 发表于 2021-6-16 10:08
羡慕代码写的快的,我两行代码能磨蹭一天

我也很羡慕这些大佬啊{:10_266:}说一些我听不懂的语言{:10_266:}一定要下定决心学好编程{:10_266:}

lengyue869 发表于 2021-6-16 11:13:22

qq1151985918 发表于 2021-6-16 09:52
Nice 还不最佳

newEntry没有继承Entry的其他属性跟方法啊?例如width,textvariable...

qq1151985918 发表于 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()
页: [1]
查看完整版本: entry文本框怎么设置提示文字?