Как получить текст записи в другом окне?
Я пытаюсь создать игру, которая позволяет пользователю вводить "имя пользователя" через виджет входа. Отложив весь игровой аспект, сейчас мне просто нужна программа, которая загружает титульный экран, затем при нажатии на кнопку появляется новое окно "установки", предлагающее мне ввести мое имя пользователя, а затем при нажатии кнопки открывается окно настройки. прочь, и у меня есть мое игровое окно с надписью "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