GUI のテキストボックスの更新に問題があります。コードは原則として次のようになります。
# The Static_textbox module
# -------------------------
class TP_textbox(tk.LabelFrame):
def __init__(self, master = None,bg='#000000'):
tk.LabelFrame.__init__(self, master,text = 'Information')
self.grid(row = 0, column = 0, columnspan = 1,rowspan = 1,
padx = 15, pady = 15,sticky = tk.N+tk.W + tk.S+tk.E)
self.create()
def create(self):
self.v = tk.StringVar()
self.v.set('Choose time interval and press the "Read data" button to load data')
self.textbox = tk.Label(self, textvariable = self.v,
anchor=tk.W, justify=tk.LEFT, font=("Arial", 10, 'bold'))
self.textbox.grid()
print 'not again!!!!!!!!!!!!!!!!!!!!!!!!!!!'
def update_textbox(self,TEXT):
self.v.set(TEXT)
self.update_idletasks()
# Module calling Static_textbox
# -----------------------------
import Static_textbox
def createPickel(my_dir = u'/test_data',
start = ['2012','1','2','12','45'],
stop = ['2012','6','2','12','45'],
filterVal = "filtered",
myData = transpaper_DataHolder.DataHolder()):
update_info = Static_textbox.TP_textbox()
infoText = 'Locating data on server...'
update_info.update_textbox(infoText)
「update_info = Static_textbox.TP_textbox()」という行が create 関数を含むモジュール全体を実行するため、古いテキストボックスの上に新しいテキストボックスが作成されることがわかりました。明らかに static_text モジュールの update 関数だけを呼び出したいのですが、これはどのように行われますか? このオブジェクト指向プログラミングは初めてです...愚かな質問で申し訳ありません。
編集:
以下の回答とコメントを読んだ後、解決策は次のようになるはずだと思います
メイン モジュールでテキスト ボックス オブジェクトを作成し、「データ ホルダー」モジュールに送信します。
# Main module
import Static_textbox
import transpaper_DataHolder
def __init__(self, root):
""" """
self.Data = transpaper_DataHolder.DataHolder() #class that holds data
tk.Frame.__init__(self, root)
root.title(""" FerryBox Tools """)
self._setupMainWindow()
def _setupMainWindow(self):
TextObj = Static_textbox.TP_textbox(root)
self.Data.setTextObj(TextObj)
テキストボックスオブジェクトで「update_textbox」関数を呼び出すことができるデータホルダーモジュール:
# Data holder module
class DataHolder(object):
def setTextObj(self,TextObj):
self.TextObj = TextObj
def getTextObj(self):
return self.TextObj
「update_textbox」は、いくつかの異なるモジュールから呼び出されます。
# Typical call from other modules
import transpaper_DataHolder
def createPickel(my_dir = u'/test_data',
start = ['2012','1','2','12','45'],
stop = ['2012','6','2','12','45'],
filterVal = "filtered",
myData = transpaper_DataHolder.DataHolder()):
Data = myData
infoText = 'Locating data on server...'
TextObj = Data.getTextObj()
TextObj.update_textbox(infoText)
ただし、これは機能しません。エラーはありませんが、テキストボックスは更新されません。何か提案はありますか?