arumiti
@arumiti (arumiti)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

TkinterとHTMLの区切り位置の違いについて

疑問点

「0120-123-456」←この文字列をダブルクリックするとハイフンで区切られた文字が選択がされるかと思います。
しかし、Tkinterの場合このような挙動は示しません。

区切る位置は何を基準に定められているのでしょうか?
またTkinterやpythonアプリでHTMLのような区切り方はできないのでしょうか?

HTMLの場合

input.html
<html>
    <body>
        <input type="text" value="0120-123-456">
    </body>
</html>

ダブルクリックだけで上手く選択ができます。
HTMLの結果.png

Tkinterの場合

input.py
import tkinter

txt = tkinter.Entry(width=20)
txt.insert(0, "0120-123-456")
txt.place(x=90, y=70)
root = tkinter.Tk()
root.geometry('300x200')
root.mainloop()

なぜかすべての文章が選択されてしまいます
Tkinterの結果.png

0

3Answer

「テキストを入力するコントロール」と言っても、ブラウザやフレームワークによっては、一から全て実装しているものも多々あります。
なので、モノによって挙動が違うこともありえます。

試しに、主だったPythonのGUIフレームワークはどのような動作をするか、試してみました。
(もっとも、自分はGTK4以外はほとんど使わないので、ネットで検索してささっとコードを書いてみただけですが)
とりあえず、全てWindows11で動かしてみました。

-」で区切られるもの

PySide6(Qt6)、GTK4、wxPython、Win32API(これはPythonではありませんが)

全てが選択されたもの

PySimpleGUI、Kivy

tkinterやPySimpleGUIは、シンプル故にWin32APIのコントロールを使用しているだろうと思っていましたが、挙動が違うところを見ると違うようですね。

1Like

おそらくHTMLテキストをダブルクリックした時の選択範囲はブラウザやOSによって違い、「HTMLのような区切り方」といったものは存在しないと思います。

0Like

Your answer might help someone💌