同じプレースホルダーテキストを入力するユーザーpythontkinter

クールクラウド

tkinterのプレースホルダーを作成して、それを先に進めたいと思っていましたが、ユーザーがプレースホルダーと同じテキストを入力すると、プレースホルダーに対して行われるはずのすべての効果がテキストに実装されます。とにかくこれを克服するには?

プレースホルダー:

import tkinter as tk
from tkinter import ttk

class PlaceholderEntry(tk.Entry):
    '''
    Custom modern Placeholder Entry box, takes positional argument master and placeholder\n
    Use ret() for getting output from entry widget\n
    Use ins() for inserting into entry widget\n
    Use remove() for deleting from entry widget\n
    ISSUES: What if the user types exactly same text as the placeholders in the entrybox?
    '''

    def __init__(self, master, placeholder, **kwargs):
        # style for ttk widget
        self.s = ttk.Style()
        self.s.configure('my.TEntry')

        # init entry box
        ttk.Entry.__init__(self, master, style='my.TEntry', **kwargs)
        self.text = placeholder

        # add placeholder if box empty
        self.add()

        # bindings of the widget
        self.bind('<FocusIn>', self.clear)
        self.bind('<FocusOut>', self.add)
        self.bind_all('<Key>', self.normal)
        self.bind_all('<Button-1>', self.cursor)

    def clear(self, *args):
        if self.get() == self.text:  # remove placeholder when focus gain
            self.delete(0, tk.END)
            self.s.configure('my.TEntry', foreground='black',
                             font=(0, 0, 'normal'))

    def add(self, *args):
        if self.get() == '':  # if no text add placeholder
            self.s.configure('my.TEntry', foreground='grey',
                             font=(0, 0, 'bold'))
            self.insert(0, self.text)  # insert placeholder
            self.icursor(0)  # move insertion cursor to start of entrybox

    def normal(self, *args):
        self.s.configure('my.TEntry', foreground='black',
                         font=(0, 0, 'normal'))  # set normal font
        self.add()  # if empty add placeholder
        if self.get() == self.text:  # clear the placeholder if starts typing
            self.bind('<Key>', self.clear)
            self.icursor(-1)  # keep insertion cursor to the end

    def ret(self):  # custom method to get the text
        if self.get() == self.text:
            return None
        else:
            return self.get()

    def ins(self, index, string):  # custom method to insert into entry
        self.clear()
        self.insert(index, string)

    def remove(self, first, last):  # custom method to remove from entry
        if self.get() != self.text:
            self.delete(first, last)
            self.add()

    def cursor(self, *args):  # method to not allow user to move cursor when placeholder there
        if self.get() == self.text:
            self.icursor(0)

if __name__ == '__main__':
    root = tk.Tk()
    plc = PlaceholderEntry(root,placeholder='Type')
    plc.pack(padx=10,pady=10)
    root.mainloop()

ボックスに「タイプ」と入力すると、エントリがプレースホルダーと間違えられるため、それ以上の挿入が削除されるため、問題を再現できます。

よろしくお願いします:D

ブライアン・オークリー

カスタムクラスがあるため、プレースホルダーテキストを追加するときにフラグを設定するのは簡単で、プレースホルダーを削除するときにフラグを設定解除するのも簡単です。次に、値を取得するときにフラグが設定されているかどうかを確認するだけです。

def add(self, *args):
    if self.get() == '':  # if no text add placeholder
        ...
        self._has_placeholder = True

def clear(self, *args):
    if self.get() == self.text:  # remove placeholder when focus gain
        self._has_placeholder = False
        ...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ユーザー入力テキストボックスにプレースホルダーテキストを追加することはできますか?

分類Dev

ユーザーがスペースなしでテキストを入力するまでプレースホルダーを表示する

分類Dev

jQuery:attr値プレースホルダーをテキスト入力からのユーザー入力に置き換えます

分類Dev

HTML-ユーザーが入力するときにプレースホルダーを保持する

分類Dev

Edgeブラウザー入力プレースホルダー(テキストが重複しています)

分類Dev

reactjsでテキスト入力プレースホルダーの色を設定する

分類Dev

入力プレースホルダーテキストでFontAwesome(5)アイコンを使用する

分類Dev

IOSでの入力時にUITextFieldにプレースホルダーテキストを保持する

分類Dev

プレースホルダー/入力テキストを入力フィールドの中央に配置し、カーソルを左揃えにする方法

分類Dev

ユーザーが入力したテキストを同じ PyQt4 ウィンドウに表示する

分類Dev

インストールされたテキストファイルのプレースホルダーを、ユーザーが入力した入力に置き換えます

分類Dev

NextJS:入力フィールドのプレースホルダーテキストを元に戻す

分類Dev

Django-同じプレースホルダーコンテンツを表示するCMSapphookedテンプレート

分類Dev

ボケ:ユーザー入力テキストを表示する

分類Dev

Bootstrap4を使用してテキスト入力のプレースホルダーを変更します

分類Dev

ユーザーが入力しているときに入力プレースホルダーを表示したままにする方法

分類Dev

プレースホルダーへのユーザー入力の追加

分類Dev

プレースホルダーへのユーザー入力の追加

分類Dev

入力プレースホルダーテキストを検索してjQueryに置き換えます

分類Dev

Swiftのテキストボックスからのユーザー入力をループする

分類Dev

ユーザーが入力フィールドイベントに何かを入力したときに、入力フィールドイベントのプレースホルダーをアニメーション化する

分類Dev

ユーザー入力でテキストファイルを検索する

分類Dev

入力テキストプレースホルダーを使用して、UPPERテキストと通常のテキストを切り替える

分類Dev

入力タイプのテキストにカーソルを合わせたときにプレースホルダーを表示する方法

分類Dev

ユーザーが入力フィールドにテキストを入力するのを停止します

分類Dev

入力したプレースホルダー文字列とテキストが同じ場合、検証が正しく機能しません

分類Dev

ユーザー入力テキストを出力テキストファイルにコピーする(Java)

分類Dev

反応ネイティブでテキスト入力プレースホルダーが下がる

分類Dev

type = dateのhtml5入力要素に存在するデフォルトのテキスト/プレースホルダーを削除します

Related 関連記事

  1. 1

    ユーザー入力テキストボックスにプレースホルダーテキストを追加することはできますか?

  2. 2

    ユーザーがスペースなしでテキストを入力するまでプレースホルダーを表示する

  3. 3

    jQuery:attr値プレースホルダーをテキスト入力からのユーザー入力に置き換えます

  4. 4

    HTML-ユーザーが入力するときにプレースホルダーを保持する

  5. 5

    Edgeブラウザー入力プレースホルダー(テキストが重複しています)

  6. 6

    reactjsでテキスト入力プレースホルダーの色を設定する

  7. 7

    入力プレースホルダーテキストでFontAwesome(5)アイコンを使用する

  8. 8

    IOSでの入力時にUITextFieldにプレースホルダーテキストを保持する

  9. 9

    プレースホルダー/入力テキストを入力フィールドの中央に配置し、カーソルを左揃えにする方法

  10. 10

    ユーザーが入力したテキストを同じ PyQt4 ウィンドウに表示する

  11. 11

    インストールされたテキストファイルのプレースホルダーを、ユーザーが入力した入力に置き換えます

  12. 12

    NextJS:入力フィールドのプレースホルダーテキストを元に戻す

  13. 13

    Django-同じプレースホルダーコンテンツを表示するCMSapphookedテンプレート

  14. 14

    ボケ:ユーザー入力テキストを表示する

  15. 15

    Bootstrap4を使用してテキスト入力のプレースホルダーを変更します

  16. 16

    ユーザーが入力しているときに入力プレースホルダーを表示したままにする方法

  17. 17

    プレースホルダーへのユーザー入力の追加

  18. 18

    プレースホルダーへのユーザー入力の追加

  19. 19

    入力プレースホルダーテキストを検索してjQueryに置き換えます

  20. 20

    Swiftのテキストボックスからのユーザー入力をループする

  21. 21

    ユーザーが入力フィールドイベントに何かを入力したときに、入力フィールドイベントのプレースホルダーをアニメーション化する

  22. 22

    ユーザー入力でテキストファイルを検索する

  23. 23

    入力テキストプレースホルダーを使用して、UPPERテキストと通常のテキストを切り替える

  24. 24

    入力タイプのテキストにカーソルを合わせたときにプレースホルダーを表示する方法

  25. 25

    ユーザーが入力フィールドにテキストを入力するのを停止します

  26. 26

    入力したプレースホルダー文字列とテキストが同じ場合、検証が正しく機能しません

  27. 27

    ユーザー入力テキストを出力テキストファイルにコピーする(Java)

  28. 28

    反応ネイティブでテキスト入力プレースホルダーが下がる

  29. 29

    type = dateのhtml5入力要素に存在するデフォルトのテキスト/プレースホルダーを削除します

ホットタグ

アーカイブ