Как получить текст записи и отобразить в другой записи? - PullRequest
0 голосов
/ 12 июня 2018

Я просто хочу, чтобы, когда я набираю свое имя в поле ввода, то появлялась другая запись с добавленным текстом.Идея набрать в записи ниже, и после этого она показывается в большой записи. Я искал это решение, но только что нашел место в 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: имя '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 голосов
/ 12 июня 2018

Есть несколько способов сделать это в 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

Для @ 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 методами, чтобы правильно манипулировать текстом.

...