Python Tkinter更改标签文本

Python Tkinter更改标签文本,python,tkinter,Python,Tkinter,我知道有很多关于tkinter的问题,但是我已经看了很多,没有一个对我有帮助 import tkinter class Calculator: def __init__(self): window = tkinter.Tk() window.geometry("200x300") window.title("Calculator") lbl = tkinter.Label(window, text="placeholder", bg="blue", te

我知道有很多关于tkinter的问题,但是我已经看了很多,没有一个对我有帮助

import tkinter

class Calculator:

  def __init__(self):
    window = tkinter.Tk()
    window.geometry("200x300")
    window.title("Calculator")

    lbl = tkinter.Label(window, text="placeholder", bg="blue", textvariable="labelText")
    lbl.grid(row=0, column=0, columnspan=3)

    self.firstNumArray = []
    self.secondNumArray = []
    self.operation = ""
    self.currentNum = "first"

    def appendNumber(self, number):
      print("Appending Number")
      if self.currentNum == "first":
        self.firstNumArray.append(number)
        print("".join(str(x) for x in self.firstNumArray))
        lbl.config(text="".join(str(x) for x in self.firstNumArray))
        window.update()
      else:
        self.secondNumArray.append(number)

    for i in range(1,4):
      string = "Creating button at ({0},{1})".format(0,i)
      print(string)
      button = tkinter.Button(text=i, command=lambda: appendNumber(self, i))
      button.grid(row=1, column=i-1)

    for i in range(1,4):
      string = "Creating button at ({0},{1})".format(1,i)
      print(string)
      button = tkinter.Button(text=i+3, command=lambda: appendNumber(self, i+3))
      button.grid(row=2, column=i-1)

    for i in range(1,4):
      string = "Creating button at ({0},{1})".format(2,i)
      print(string)
      button = tkinter.Button(text=i+6, command=lambda: appendNumber(self, i+6))
      button.grid(row=3, column=i-1)


    div = tkinter.Button(text="/")
    mult = tkinter.Button(text="*")
    add = tkinter.Button(text="+")
    sub = tkinter.Button(text="-")

    add.grid(row=1, column=3)
    sub.grid(row=2, column=3)
    mult.grid(row=3, column=3)
    div.grid(row=4, column=3)

    button = tkinter.Button(text="0")
    button.grid(row=4, column=1)

    window.mainloop()



calc = Calculator()

当我启动程序时,窗口打开。当我点击一个按钮时,标签中的文本不会改变。我曾尝试使用
StringVar
作为
textvariable
,然后调用
set()
函数,但也没有成功。我认为这与功能的范围有关。我不得不将
appendNumber()
函数放在
\uuu init\uuuu()
中,因为出于某种原因
self.lbl=tkinter.Label()
根本不会弹出任何内容。

您的代码有一些问题

  • labelText
    当然应该是
    StringVar
    而不是字符串

    labelText = tkinter.StringVar()
    lbl = tkinter.Label(window, bg="blue", textvariable=labelText)
    lbl.grid(row=0, column=0, columnspan=3)
    
  • 现在可以使用
    labelText.set
    更新文本。另外,不需要
    self
    参数或
    窗口。更新

    def appendNumber(number):
        if self.currentNum == "first":
            self.firstNumArray.append(number)
            labelText.set("".join(str(x) for x in self.firstNumArray))
        else:
            self.secondNumArray.append(number)
    
  • 您可以使用
    /
    (整数(!)除法)和
    %
    (模)运算将所有按钮放在一个循环中。另外,请注意,
    lambda
    中的变量是在调用函数时计算的,而不是在声明函数时计算的,即所有
    lambda
    都将使用
    i
    的最后一个值(在这种情况下为
    9
    )——请参见示例。作为补救措施,使用
    lambda n=i+1:appendNumber(n)

  • 这不是一个真正的问题,但由于您不需要对这些按钮的引用,因此可以使代码更加紧凑(其他按钮也是如此):


  • 我可以看到您有一个未使用的带有标签的
    textvariable
    。请尝试删除它。非常感谢您的帮助!
    for i in range(9):
        btn = tkinter.Button(text=i+1, command=lambda n=i+1: appendNumber(n))
        btn.grid(row=i//3+1, column=i%3)
    
    tkinter.Button(text="/").grid(row=1, column=3)