59

I am having trouble with using a key binding to change the value of a label or any parameter. This is my code:

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()

When I run this, I click the entrybox and hit enter, hoping that the label will change value to 'change the value'. However, while it does print that text, the label remains unchanged.

From looking at other questions on similar problems and issues, I have figured how to work with some of this outside a class, but I'm having some difficulties with doing it inside a class.

Also, on a side note, what role does "master" play in tkinter?

4

6 に答える 6

93
self.labelText = 'change the value'

上記の文は、labelText の値を変更しますが、depositLabel のテキストは変更しません。

DepositLabel のテキストを変更するには、次の設定のいずれかを使用します。

self.depositLabel['text'] = 'change the value'

また

self.depositLabel.config(text='change the value')
于 2013-06-15T17:13:07.327 に答える
7

メソッドを使用してconfig、ラベルの値を変更します。

top = Tk()

l = Label(top)
l.pack()

l.config(text = "Hello World", width = "50")
于 2016-03-25T17:18:16.200 に答える
2

ここにもう一つあると思います。参考までに。クラス 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')
于 2013-12-11T13:09:03.567 に答える
1

ボタンがクリックされた後にラベルを設定する小さな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()
于 2016-03-18T13:38:37.930 に答える