@Ryslynx

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Customtkinterでの不安定動作

解決したいこと

Customtkinterのボタンを押した時に
 意図した動作が起こる場合(メッセージボックスにボタン番号表示)
 下記のエラーが出る場合
の2通り発生する。

発生は、意図した動作:エラー = 1:9程度
ボタンを連打すればたまにメッセージボックスが出てくる。

まったくの間違いであれば、メッセージボックスは表示されないが、たまにでるというのが解せない。

発生している問題・エラー

_tkinter.TclError: unknown option "-text"

例)

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\***\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\***\Desktop\PythonApplication1\testpy.py", line 5, in test
    num = event.widget.cget("text")
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\***\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1708, in cget
    return self.tk.call(self._w, 'cget', '-' + key)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_tkinter.TclError: unknown option "-text"

該当するソースコード

from customtkinter import CTk, CTkButton
from tkinter import messagebox

def test(event):
    num = event.widget.cget("text")
    messagebox.showinfo("ボタン番号",num)

app = CTk()

btn = [CTkButton(app,text=i) for i in range(10)]
for i in btn:
    i.bind("<Button-1>",test)
    i.pack()

app.mainloop()

自分で試したこと

ボタン連打 : たまにメッセージボックス
関係ないところをクリックしてボタンクリック : 特に影響なし。ほぼエラー、たまにmsgbox
違うボタンを順番にクリック : 特に影響なし。ほぼエラー、たまにmsgbox

プログラムの動作タイミング?
すみません、わかる方教えてください。

0 likes

1Answer

ボタンのテキストをクリックするとエラーとならず、
ボタンのテキスト以外をクリックするとエラーとなりますね。
いずれもイベント自体は拾えているので、try-except するなりして、text を取得できなかった場合を考慮してはどうでしょうか。
ボタンの連打は関係なさそうです。

0Like

Comments

  1. @Ryslynx

    Questioner

    回答ありがとうございます。
    試してみたら、ボタンの空白部分のクリックではエラーになり、文字がある部分では、しっかりと反応しました。
    try-exceptとボタン幅の適正化で乗り切ろうと思います。

    ありがとうございました。

  2. @Ryslynx

    Questioner

    最近判ったので追記です。
    ボタンのwidget.winfo_children()で、ボタンはフレームとラベルから構成されているようなので、フレーム部分をクリックした場合はcget("text")でエラーが出ます。
    フレームをクリックした場合でもwidget.parent()で親のボタンを特定できるので、この親にcget("text")をしてやるようにすると、フレーム、ラベルのどちらでも、ボタンのテキストを取得できるようになりました。

Your answer might help someone💌