从输入文本框中获取空字符串,而不是输入值

时间:2019-07-09 11:18:42

标签: python tkinter

我已经在tkinter窗口中创建了一个文本框,该按钮称为按钮。 我想在单击按钮的另一个窗口中获取文本框的值。 但是,当我在控制台上打印该值时,它将打印一个空字符串,而不是在文本框中输入的值。

from tkinter import *

def click():
    print(id.get())

def submit():
    win2=Tk()
    Label1=Label(win2,text='Id').pack()
    global id
    id=StringVar()
    textbox=Entry(win2,textvariable=id).pack()
    btn2=Button(win2,text='Click',command=click).pack()

win1=Tk()
btn1=Button(win1,text='Submit',command=submit).pack()

请检查我的代码。

3 个答案:

答案 0 :(得分:1)

您可能想尝试这样的事情:

oscar.core.exceptions.AppNotFoundError: Couldn't find an Oscar app to import checkout.calculators from

编辑:与原始代码的主要区别在于import tkinter as tk class MainPage(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.btn1 = tk.Button(self, text='Submit', command=self.submit) self.btn1.pack() def submit(self): self.win2 = tk.Tk() self.Label1 = tk.Label(self.win2, text='Id') self.Label1.pack() self.id = tk.StringVar() self.textbox = tk.Entry(self.win2, textvariable=self.id) self.textbox.pack() self.btn2 = tk.Button(self.win2, text='Click', command=self.click) self.btn2.pack() def click(self): print(self.textbox.get()) interface = MainPage() interface.mainloop() 调用Entry小部件,而不是print。如果您想将StringVar设置为插入文本框中的文本,则必须在某个时间致电

StringVar

然后self.id.set(self.textbox.get()) 将返回您期望的结果。

答案 1 :(得分:0)

从@neko的先前答案中,我得到了与我的代码相似的答案:

from tkinter import *

def click():
    print(textbox.get())

def submit():
    win2=Tk()
    Label1=Label(win2,text='Id').pack()
    global textbox
    id=StringVar()
    textbox=Entry(win2,textvariable=id)
    textbox.pack()
    btn2=Button(win2,text='Click',command=click).pack()


win1=Tk()
btn1=Button(win1,text='Submit',command=submit).pack()

问题是我使用的是id.get(),它在多个tkinter窗口中不起作用。所以现在我使用textbox.get()在这里工作正常。

答案 2 :(得分:-1)

您是否尝试过这样做? :

print(id.get("1.0",'end-1c'))

“ 1.0”部分告诉该方法从第一行开始读取(由于为0,所以从第一个字符开始)。 'end-1c'参数告诉方法读取直到到达文本末尾。请注意,1c会从文本中删除1个字符,因为如果仅使用'end',它将在文本的末尾添加一个新的行字符。