python - 如何将Entry框中的输入放入Tkinter的标签中?

0 投票
2 回答
1925 浏览
提问于 2025-04-20 07:59

我正在尝试把输入框里提交的信息放到我的画布上的一个标签里。目前我在标签上看到的只有这些。

PY_VAR#

这是我现在的代码。

import tkinter
from tkinter import *
font = ("Times New Roman", 5)
font2 = ("Times New Roman", 10) 
font3 = ("Times New Roman", 15)
def getData():
       1a.get()
       2a.get()
       test()

def enterData():
       global 1a, 2a
       canvas = tkinter.Canvas(root, width=800, height=600)
       box1 = Entry(textvariable = 1a).place(x=100, y=200)
       box2 = Entry(textvariable = 2a).place(x=300, y=200)
       Button(text = "enter data", font = font2, command = getData).place(x=560, y=100)

def test():
        global 1a, 2a
        1a = StringVar()
        2a = StringVar()
        root = tkinter.Tk()
        canvas = tkinter.Canvas(root, width=800, height=600)
        canvas.pack()

        Label(root, text = 1a, font = font3).place(x=70,  y=400)
enterData()

我也试着查看一下1a和2a被赋值成了什么,它们总是显示为PY_VAR#。

有没有人能帮我看看我的代码哪里出问题了?

2 个回答

1

你把Labeltext参数赋值给了一个叫变量1a,而不是赋值给内容。你可以试试这样做:

Label(root, text=1a.get())

不过我得说,这段代码有点荒谬。1a2a根本不能作为变量,place()在创建图形用户界面时通常是个坏主意,你在做一些不必要的操作(函数getData已经完全过时了),而且你总是在创建新的标签。

1

首先,你不想每次点击按钮时都创建新的 StringVar,所以把这些变量的创建放到最上面,并给它们重新命名——变量名不能以数字开头(别忘了在 enterData 函数中也要修改对 1a2a 的引用):

#  import tkinter    You shouldn't import tkinter in two different ways - get rid of this one...
from tkinter import *
font = ("Times New Roman", 5)
font2 = ("Times New Roman", 10) 
font3 = ("Times New Roman", 15)

stringVar1a = StringVar()
stringVar2a = StringVar()

其次,1a.get()2a.get() 这两行代码其实没什么用——它们只是获取输入框里的内容,但并没有对这些内容做任何处理。所以其实你不需要单独的 getDatatest 函数,不过为了保持你的结构,我就不删它们了:

def getData():
    test()

第三,当你创建标签时,不要把它的文本属性设置为 StringVar,而是要把 textvariable 属性设置为 StringVar

Label(root, textvariable = stringVar1a, font = font3).place(x=70,  y=400)

撰写回答