如何获取输入文本并在另一个条目中显示?

时间:2018-06-12 19:59:41

标签: python tkinter tkinter-entry

我只想在输入框中输入我的名字然后出现在另一个带有一些添加文字的条目中。这个想法是在下面的条目中键入,之后它在大条目中显示。我正在寻找这个解决方案,但只是在Label中找到了位置。我不想要标签。窗口比较大,必须拖动才能显示条目。这是我在这个剧本中使用的图片:

from tkinter import *
from PIL import Image, ImageTk

root = Tk()

cat = Entry(root)
cat.place(x=48, y=25, width= 350, height=140)

user = Entry(root)
user.place(x=75, y=550)

btn = Button(root, text='START')
btn.place(x=220, y=410)

root.mainloop()

好的,它按照你告诉我的方式工作,谢谢!

但现在我面临另一个问题。

问题是当我在第二个窗口中插入游戏功能时。我在一个窗口中测试它可以工作,但是当我将功能放在第二个窗口时,当我按下"开始"按钮: ''' user_try = int(txt.get()) NameError:name' txt'没有定义''

当我按下重置按钮时出现另一个错误: ''' user_try = int(txt.get()) NameError:name' txt'没有定义''

所以我知道缺少定义,但我不知道如何在第二个窗口中为这个命令做一个参考。就像我说用一个窗口运行程序一样。

也许我应该使用课程,我不知道,但我希望这样做,我开始。但是,如果我没有其他办法可以做,那就走吧。

我只是在这里简化脚本,实际主脚本更大,所以我的想法是在打开程序时,有一个窗口,用户阅读有关游戏的说明并继续打开第二个窗口。窗口在下一张图片中有图片和一些隐藏按钮,因此将与环境互动。 猜测数字只是开始。之后会有新的挑战。 我很高兴这样做,但我仍然坚持这一点。我完成的第一部分,图片,隐藏的按钮,它是我想要的方式,但挑战在这个问题上停止了。

from tkinter import *
from PIL import Image, ImageTk, ImageSequence
import random
from tkinter import messagebox

pc = random.randint(1,10)

def reset():
global pc
pc = random.randint(1,10)
cat['text'] = 'Ok! Lets Try Again!'

def openwin2():
win1.withdraw()
win2 = Toplevel()
win2.geometry('350x300+180+100')
win2.title('second window')
txt = Entry(win2)
txt.place(x=10,y=10)
cat = Label(win2,wraplength=300)
cat.place(x=10,y=50)
cat.config(text='Hi! I Am thinking a number between 1 and 10.')
btn = Button(win2,text='start',command=check)
btn.place(x=30, y=150)

btn2 = Button(win2, text='reset', command=reset)
btn2.place(x=110,y=150)
win2.mainloop()
def check():

user_try = int(txt.get())
if user_try < pc:
    msg = 'Hmmmm... the number, which I thought of, is greater than this.'
elif user_try > pc:
    msg = 'How about trying a smaller number ?!'
elif user_try == pc:
    msg = 'Well Done! You guessed! It was %s the number!' % user_try
else:
    msg = 'Something Went Wrong...'

cat['text'] = msg

win1 = Tk()

win1.title('First Window')
win1.geometry('350x300')

user = Label(win1,text='first window')
user.place(x=10,y=10)

btn1 = Button(win1,text='Open Window 2', command=openwin2)
btn1.place(x=10,y=50)


win1.mainloop()

1 个答案:

答案 0 :(得分:1)

在tkinter中有多种方法可以执行此操作,这里使用设置为StringVar对象的textvariable属性的Entry对象对代码进行返工:

import tkinter as tk

def doit():
    out_string.set("Hello " + in_string.get())

root = tk.Tk()

in_string = tk.StringVar()
out_string = tk.StringVar()

cat = tk.Entry(root, textvariable=in_string)
cat.place(x=20, y=25, width=100)

user = tk.Entry(root, textvariable=out_string)
user.place(x=20, y=75)

btn = tk.Button(root, text='START', command=doit)
btn.place(x=20, y=150)

root.mainloop()

enter image description here

Per @ Mike-SMT,这是使用Entry.get()Entry.insert()的不同方法。当用户单击按钮时,它会扩充文本:

import tkinter as tk

def doit():
    user.insert(tk.END, cat.get())

root = tk.Tk()

cat = tk.Entry(root)
cat.place(x=20, y=25, width=100)

user = tk.Entry(root)
user.place(x=20, y=75)
user.insert(0, "Hello ")

btn = tk.Button(root, text='START', command=doit)
btn.place(x=20, y=150)

root.mainloop()

但是,您会看到后续按钮点击会继续附加文字。使用Entry.insert()时,您需要使用Entry.delete()和/或其他Entry方法来正确操作文本。