キーバインディングを使用してラベルまたはパラメーターの値を変更するのに問題があります。これは私のコードです:
from tkinter import*
class MyGUI:
def __init__(self):
self.__mainWindow = Tk()
#self.fram1 = Frame(self.__mainWindow)
self.labelText = 'Enter amount to deposit'
self.depositLabel = Label(self.__mainWindow, text = self.labelText)
self.depositEntry = Entry(self.__mainWindow, width = 10)
self.depositEntry.bind('<Return>', self.depositCallBack)
self.depositLabel.pack()
self.depositEntry.pack()
mainloop()
def depositCallBack(self,event):
self.labelText = 'change the value'
print(self.labelText)
myGUI = MyGUI()
これを実行するとき、エントリーボックスをクリックしてEnterを押し、ラベルが値を変更して「値を変更する」ことを期待します。ただし、そのテキストは印刷されますが、ラベルは変更されません。
同様の問題や問題に関する他の質問を見て、クラス外でこれを処理する方法を考えましたが、クラス内でそれを行うのは少し困難です。
また、補足として、tkinterで「マスター」はどのような役割を果たしますか?
self.labelText = 'change the value'
上記の文はlabelTextを「値の変更」を参照するように作成しますが、depositLabelのテキストは変更しません。
DepositLabelのテキストを変更するには、次の設定のいずれかを使用します。
self.depositLabel['text'] = 'change the value'
OR
self.depositLabel.config(text='change the value')
ラベルを作成するときにtextvariable
を定義し、ラベルのテキストを更新するようにtextvariableを変更することもできます。以下に例を示します。
labelText = Stringvar()
depositLabel = Label(self, textvariable=labelText)
depositLabel.grid()
def updateDepositLabel(txt) # you may have to use *args in some cases
labelText.set(txt)
depositLabel
のテキストを手動で更新する必要はありません。 Tkはあなたのためにそれをします。
ここに別のものがあると思います。参照用です。変数をクラスStringVarのインスタンスに設定しましょう
Tcl言語を使用してTkをプログラムする場合、変数が変更されたときに通知するようシステムに要求できます。 Tkツールキットは、トレースと呼ばれるこの機能を使用して、関連する変数が変更されたときに特定のウィジェットを更新できます。
Python変数への変更を追跡する方法はありませんが、Tkinterでは、TkがトレースされたTcl変数を使用できる場所であればどこでも使用できる変数ラッパーを作成できます。
text = StringVar()
self.depositLabel = Label(self.__mainWindow, text = self.labelText, textvariable = text)
^^^^^^^^^^^^^^^^^
def depositCallBack(self,event):
text.set('change the value')
ボタンをクリックした後にラベルを設定する小さなtkinterアプリケーションを作成しました
#!/usr/bin/env python
from Tkinter import *
from tkFileDialog import askopenfilename
from tkFileDialog import askdirectory
class Application:
def __init__(self, master):
frame = Frame(master,width=200,height=200)
frame.pack()
self.log_file_btn = Button(frame, text="Select Log File", command=self.selectLogFile,width=25).grid(row=0)
self.image_folder_btn = Button(frame, text="Select Image Folder", command=self.selectImageFile,width=25).grid(row=1)
self.quite_button = Button(frame, text="QUIT", fg="red", command=frame.quit,width=25).grid(row=5)
self.logFilePath =StringVar()
self.imageFilePath = StringVar()
self.labelFolder = Label(frame,textvariable=self.logFilePath).grid(row=0,column=1)
self.labelImageFile = Label(frame,textvariable = self.imageFilePath).grid(row = 1,column=1)
def selectLogFile(self):
filename = askopenfilename()
self.logFilePath.set(filename)
def selectImageFile(self):
imageFolder = askdirectory()
self.imageFilePath.set(imageFolder)
root = Tk()
root.title("Geo Tagging")
root.geometry("600x100")
app = Application(root)
root.mainloop()
config
メソッドを使用して、ラベルの値を変更します。
top = Tk()
l = Label(top)
l.pack()
l.config(text = "Hello World", width = "50" , )
このような問題に取り組むには多くの方法があります。これを行うには多くの方法があります。私が知っているこの質問に対する最も簡単な解決策を提供します。ラベルまたは任意の種類のウィジェットのテキストを実際に変更する場合。このようにします。
Name_Of_Label["text"] = "Your New Text"
したがって、この知識をコードに適用すると、これは次のようになります。
from tkinter import*
class MyGUI:
def __init__(self):
self.__mainWindow = Tk()
#self.fram1 = Frame(self.__mainWindow)
self.labelText = 'Enter amount to deposit'
self.depositLabel = Label(self.__mainWindow, text = self.labelText)
self.depositEntry = Entry(self.__mainWindow, width = 10)
self.depositEntry.bind('<Return>', self.depositCallBack)
self.depositLabel.pack()
self.depositEntry.pack()
mainloop()
def depositCallBack(self,event):
self.labelText["text"] = 'change the value'
print(self.labelText)
myGUI = MyGUI()
これが役立つ場合、私に知らせてください!