我已经在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()
请检查我的代码。
答案 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',它将在文本的末尾添加一个新的行字符。