Python Tkinter更改标签文本
我知道有很多关于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
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)