我如何修改/添加文本到tkinter.Label?

时间:2016-08-05 15:24:15

标签: python user-interface tkinter calculator

我正在学习基本的Python。我目前正在尝试创建一个只有加法和减法的简单计算器程序。我有一个问题。我不确定如何在按下按钮时将文本添加到我的Python标签中。现在,按下“1”按钮后,我的程序会将显示标签更改为文本“1”。但是,我希望我的程序添加文本,而不是设置它。

例如,如果我按下'按钮1'5次,它当前会重置标签文本5次,结果只有1个。我希望它在按下时将数字添加到标签上,而不是替换。< / p>

按下按钮5次后的当前结果: 1
按下按钮5次后要求的结果: 11111

这是我目前的程序代码。如果有什么不清楚,请问;感谢。

from tkinter import *

window = Tk()

# Creating main label
display = Label(window, text="")
display.grid(row=0, columnspan=3)

def add_one():
    display.config(text='1')

# Creating all number buttons
one = Button(window, text="1", height=10, width=10, command=add_one)
two = Button(window, text="2", height=10, width=10)
three = Button(window, text="3", height=10, width=10)
four = Button(window, text="4", height=10, width=10)
five = Button(window, text="5", height=10, width=10)
six = Button(window, text="6", height=10, width=10)
seven = Button(window, text="7", height=10, width=10)
eight = Button(window, text="8", height=10, width=10)
nine = Button(window, text="9", height=10, width=10)
zero = Button(window, text="0", height=10, width=10)

# Placing all number buttons
one.grid(row=1, column=0)
two.grid(row=1, column=1)
three.grid(row=1, column=2)
four.grid(row=2, column=0)
five.grid(row=2, column=1)
six.grid(row=2, column=2)
seven.grid(row=3, column=0)
eight.grid(row=3, column=1)
nine.grid(row=3, column=2)

# Creating all other buttons
add = Button(window, text="+", height=10, width=10)
subtract = Button(window, text="-", height=10, width=10)
equal = Button(window, text="=", height=10, width=10)

# Placing all other buttons
add.grid(row=4, column=0)
subtract.grid(row=4, column=1)
equal.grid(row=4, column=2)

window.mainloop()

3 个答案:

答案 0 :(得分:2)

你应该使用StringVar。并且您的回调需要获取StringVar的当前内容,修改它,并使用修改后的字符串来设置StringVar的新值。像这样:

import tkinter as tk

window = tk.Tk()

# Creating main label
display_text = tk.StringVar()
display = tk.Label(window, textvariable=display_text)
display.grid(row=0, columnspan=3)

def add_one():
    s = display_text.get()
    s += '1'
    display_text.set(s)

one = tk.Button(window, text="1", height=10, width=10, command=add_one)
one.grid(row=1, column=0)

window.mainloop()
顺便说一句,你应该按照DRY原则,使用for循环来创建和布置你的按钮,让你的程序更紧凑。

此外,使用from tkinter import *并不是一个好主意。它会在您的命名空间中导入130多个名称,如果您不小心为自己的某个变量或函数使用Tkinter名称,则可以轻松创建名称冲突。

答案 1 :(得分:1)

您可以像下面这样定义add_one,先获取现有值,然后为其添加新值:

def add_one():
    current_value = display.cget("text")
    new_value = current_value + "1"
    display.config(text=new_value)

答案 2 :(得分:0)

这是你正在寻找的东西:

from tkinter import *
root = Tk()

var = StringVar()

def f1():
    var.set(" ")
    var.set("1")

def f2():
    var.set(" ")
    var.set("2")

label = Label(root, textvariable=var)
label.pack()

button1 = Button(root, text="One", command=f1)
button1.pack()

button2 = Button(root, text="Two", command=f2)
button2.pack()