Как получить текст записи в другом окне?

Я пытаюсь создать игру, которая позволяет пользователю вводить "имя пользователя" через виджет входа. Отложив весь игровой аспект, сейчас мне просто нужна программа, которая загружает титульный экран, затем при нажатии на кнопку появляется новое окно "установки", предлагающее мне ввести мое имя пользователя, а затем при нажатии кнопки открывается окно настройки. прочь, и у меня есть мое игровое окно с надписью "USERNAME: [ваше имя здесь]".

Кто-нибудь может мне с этим помочь?

(РЕДАКТИРОВАТЬ: Вот код, над которым я сейчас работаю

from tkinter import *
import random
import os
import time
import math

def cargarimagen(nombre):
    ruta=os.path.join('Images',nombre)
    imagen=PhotoImage(file=ruta)
    return imagen

def operacion():
    num1=random.randint(0,255)
    num2=random.randint(0,255)
    op=random.randint(0,4)    
    if op == 0:
        prompt= (hex(num1)[2:].upper() + " + " + hex(num2)[2:].upper())
        answer= num1 + num2
    if op == 1:
        prompt= (hex(num1)[2:].upper() + " - " + hex(num2)[2:].upper())
        answer= num1 - num2
    if op == 2:
        prompt= (hex(num1)[2:].upper() + " C16")
        answer= (16**2) - num1
    if op == 3:
        prompt= (hex(num1)[2:].upper() + " C15")
        answer= (16**2) - num1 - 1
    return prompt


def changeName():
    name = setup.yourName.get()
    GameWindow.labelText.set(name)
    setup.yourName.delete(0, END)
    setup.yourName.insert(0, ' ')
    return

def play():
    return GameWindow() + changeName()

root= Tk()
root.title('Polyominos Start Menu')
root.minsize(640,480)
root.maxsize(640,480)

class MainWindow:
    def __init__(self,parent):
        self.contenedor=Canvas(parent,width=640,height=480)
        self.contenedor.place(x=0,y=0)
        self.foto=cargarimagen('Tetris.gif')
        self.label_fondo=Label(self.contenedor,image=self.foto)
        self.label_fondo.place(x=0,y=0)
        self.but=Button(root, text="START",font="Helvetica",width=10,height=2,bg='White',command=SetupWindow)
        self.but.place(x=213,y=413)
        self.about=Button(root, text="ABOUT",font="Helvetica",width=10,height=2,bg='White',command=AboutWindow)
        self.about.place(x=320,y=413)


def SetupWindow():
    setup=Toplevel()
    setup.minsize(124,190)
    setup.maxsize(124,190)
    setup.title('Set Up')
    frame = Frame(setup,bg ="White" )
    frame.grid()
    lab1= Label(frame, text='Enter your name:', bg ="White").grid(column=0, row=0)

    custName = StringVar(None)
    yourName = Entry(frame, textvariable=custName, bg ="White").grid(column=0, row=1)

    lab2= Label(frame, text=' ', bg ="White").grid(column=0, row=2)
    lab3= Label(frame, text='Pick a difficulty:', bg ="White").grid(column=0, row=3)
    diff = StringVar()
    diff.set(None)
    radio1 = Radiobutton(frame, text='Easy', value='Easy', variable = diff, bg ="White").grid(column=0,row=4)
    radio1 = Radiobutton(frame, text='Medium', value='Medium', variable = diff, bg ="White").grid(column=0,row=5)
    radio1 = Radiobutton(frame, text='Hard', value='Hard', variable = diff, bg ="White").grid(column=0,row=6)
lab4= Label(frame, text=' ', bg ="White").grid(column=0, row=7)
    playnow= Button(frame, text='READY', command=play, bg ="White").grid(column=0,row=8)
lab5= Label(frame, text=' ', bg ="White").grid(column=0, row=9)


def GameWindow():
    root.withdraw()
    GameWindow=Toplevel()
    GameWindow.minsize(595,300)
    GameWindow.maxsize(595,300)
    GameWindow.title('Polyominos')
    operaciones=Frame(GameWindow,width=300,height=300, bg='white', highlightthickness=5, highlightbackground='black')
    operaciones.place(x=0, y=0)

    labelText = StringVar()
    labelText.set('USER')
    usrname = Label(operaciones, textvariable=labelText)
    usrname.place(x=80, y=20)

    cubos=Frame(GameWindow,width=300,height=300, bg="white", highlightthickness=5, highlightbackground='black')
    cubos.place(x=295, y=0)


def AboutWindow():
    about=Toplevel()
    about.minsize(137,94)
    about.maxsize(137,94)
    about.title('About Polyominos')
    frame1 = Frame(about,bg ="White" )
    frame1.grid()
    lab0 = Label(frame1, text="David Salazar Quintana",bg ="White").grid(column=0,row=0)
    lab1 = Label(frame1, text="ITCR",bg ="White",).grid(column=0,row=1)
    lab2 = Label(frame1, text="Ingeneria en computadores",bg ="White").grid(column=0,row=2)
    lab3 = Label(frame1, text="Profesor: Milton Villegas",bg ="White").grid(column=0,row=3)
    lab4 = Label(frame1, text="Version: 1.0 (Abril 2012)",bg ="White").grid(column=0,row=4)





Botones_Principales=MainWindow(root)    
mainloop()
root.destroy()

Извините за то, что код наполовину на испанском, вы все равно должны понимать, что происходит).

1 ответ

Я надеюсь, что этот кусок кода поможет вам понять, как реализовать всплывающее текстовое диалоговое окно. Способ работы этого примера заключается в реализации кнопки в главном окне (root), при нажатии на которую появляется всплывающее диалоговое окно. MyDialog будет создан объект класса, затем он будет использовать wait_window() ждать, пока это не закончится. Вы можете увидеть, как реализовано всплывающее диалоговое окно, это простое TopLevelвиджет, это как другой кадр, который вы можете придумать, вы упаковываете свой ярлык, ваш Entry поле и, наконец, кнопка mySubmitButton,

Посмотрите на send функция, это в значительной степени просто получить запись с помощью простого .get() метод из Entry, И тогда вы будете destory() окно, и вернитесь обратно в главное окно. Вы можете делать это столько раз, сколько хотите.

import tkinter as tk

class MyDialog:
    def __init__(self, parent):
        top = self.top = tk.Toplevel(parent)
        self.myLabel = tk.Label(top, text='Enter your username below')
        self.myLabel.pack()

        self.myEntryBox = tk.Entry(top)
        self.myEntryBox.pack()
        self.mySubmitButton = tk.Button(top, text='Submit', command=self.send)
        self.mySubmitButton.pack()

    def send(self):
        global username
        username = self.myEntryBox.get()
        self.top.destroy()

def onClick():
    inputDialog = MyDialog(root)
    root.wait_window(inputDialog.top)
    print('Username: ', username)

username = 'Empty'
root = tk.Tk()
mainLabel = tk.Label(root, text='Example for pop up input box')
mainLabel.pack()

mainButton = tk.Button(root, text='Click me', command=onClick)
mainButton.pack()

root.mainloop()

В примере вывода я сделал это два раза. Поступил George а также Sam (мой друг) в качестве имени пользователя, и имя пользователя будет обновляться каждый раз, когда вы открываете новое диалоговое окно. Выход:

>>> ================================ RESTART ================================
>>> 
Username:  George
Username:  Sam

Редактировать: кнопка отправки кажется глючной? Иногда не хочется появляться. Это кликабельно, но он не появляется, пока не нажал. Кажется, это единственная проблема для Mac OS.

Использованная ссылка: effbot, stackru, tutorialspoint, daniweb

Другие вопросы по тегам