右の画像のようなボタンを配置したウィンドウを使うスクリプトを開発していて、なかなかエラーが取れずにかなり悩みました。
ボタンが沢山あるので、コールバック関数で状態を変化させたり、それに合わせてボタンの外観を変化させるのにButtonウィジットの導出クラスを用いることにしました。
わからないことはGoogleさんに聞けということで、tkinterとpythonで検索すると大体同じページがヒットします。
そこにあるサンプルを参考にするのですが、サンプルなので簡単な構造になっていて、複数の関数とかクラスの構成になると名前空間の解決がなかなかできません。メインプログラム/サブ関数/クラスとかの位置を変えてもあちらを立てれば、こちらが立たずと全然エラーが取れませんでした。

思いっきり悩んだ末にやっと解決した結果はtkinterモジュールのimportの方法でした。
下記リンク先に記述してありますが、importには3通りの方法があり、すべて名前空間が異なるようです。
コーディングについて – import
私はサンプルによくある「from tkinter import *」というコーディングをしていました。この方法だとtkinterのウィジット等のコーディングがシンプルになります。
「import tkinter as tk」にコーディングを修正したら、あんなに悩んだ名前空間の解決ができました。
この方法だとtkinterのオブジェクトに親クラス(tk)の記述が必要になりますが、明示的に指定するのでエラーがでにくくなるのではないかと思われます。
とりあえず、スクリプトが動作するようになったので万々歳です。
tkinterのリファレンスはリンクのPython Tutorialのページの左側メニューのPython – GUI Programmingがお勧めです。
P.S.
作成しているのは、Clothing MorphKit for Victoria 4 by Netherworks Studiosを使ったバッチ処理スクリプトです。