2012-04-07 22 views
2

我想創建一個遊戲,允許用戶通過輸入小部件輸入「用戶名」。撇開整個遊戲方面,現在我只需要一個加載標題屏幕的程序,然後點擊一個按鈕時出現一個新的「設置」窗口,提示我輸入用戶名,然後點擊一個按鈕,設置窗口就會出現我有我的遊戲窗口,標籤上寫着「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() 

很抱歉的代碼是一半在西班牙的代碼,你仍然應該得到,雖然這是怎麼回事)。

回答

0

我希望這段代碼能夠幫助您弄清楚如何實現彈出文本對話框。這個例子的工作方式是在主窗口(root)中實現一個按鈕,當你點擊它時,彈出對話框將出現類對象,將被創建,然後它將使用wait_window()等待它完成。您可以看到彈出式對話框是如何實現的,它是一個簡單的TopLevel小部件,它就像您可以想到的另一個框架,您打包標籤,Entry字段,最後是一個按鈕mySubmitButton

看不起send函數,它幾乎只是從Entry獲取使用簡單.get()方法的條目。然後你將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() 

enter image description here

在示例輸出我做了兩次。輸入GeorgeSam(我的朋友)作爲用戶名,每次打開新對話框時都會更新用戶名。 輸出:

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

編輯:提交按鈕好像是馬車?它有時不想出現。它是可點擊的,但它不會出現,直到它被點擊。這似乎是Mac OS唯一的問題。

參考使用:effbotstackoverflowtutorialspointdaniweb

相關問題