テキスト入力フィールドが中央にあり、ユーザーの入力を返すカスタムテキスト入力ボックスを作成しようとしています。私は特に、他のプログラムでインポートして再利用できるものを作ることを試みています。私の現在の反復では、それが自分の.pyファイルに入っているときに入力を取得するためにうまく動作する "inputdialog"クラスを使用しますが、モジュールを別のスクリプトにインポートしようとすると "ok"ボタンは一見何もせず、 "x "ボタンがポップアップを閉じた後、" ImportError:名前をインポートできません "というエラーが表示されます。Python Tkinterのカスタムmsgboxがインポート中に失敗する
次のスタンドアロンスクリプトとして実行した場合、現在動作します私のコードです:
if __name__ == "__main__":
# These two lines below are needed to make sure that "askopenfilename"
# doesn't show it's top level tkinter window
root = Tk()
root.withdraw()
entdbemp = askopenfilename(title="Please select a file: ")
# Here is my non-working module call
master = inputdialog()
print(master.value)
:
from tkinter import *
class inputdialog:
def __init__(self):
self.value = None
self.root = Tk()
self.root.withdraw()
self.top = Toplevel(self.root)
Label(self.top, text="Value").pack()
self.e = Entry(self.top)
self.e.pack(padx=5)
b = Button(self.top, text="OK", command=self.ok)
b.pack(pady=5, padx=5, side="right")
self.root.mainloop()
def ok(self):
self.value = self.e.get()
self.root.destroy()
if __name__ == "__main__":
test = inputdialog()
print(test.value)
次は、私が現在動作していない別のプログラムの中にこのモジュールをインポートした方法です
インポート時に「OK」ボタンが機能しなくなるのはなぜですか?インポートするためにコードを修正できる方法はありますか? tkinterを使用してインポート可能なテキスト入力モジュールを作成するより良い方法がありますか?
1つの問題は、 'Tk'の2つのインスタンスを作成していることです。 Tkinterは 'Tk'のインスタンスを1つだけ持つように設計されています。 –