Skip to main content
 首页 » 编程设计

python之如何在不同的窗口上获取条目文本

2025年05月04日9dudu

我正在尝试创建一个允许用户通过输入小部件输入“用户名”的游戏。抛开整个游戏方面,现在我只需要一个加载标题屏幕的程序,然后单击一个按钮会出现一个新的“设置”窗口,提示我输入我的用户名,然后单击一个按钮,设置窗口就会出现离开,我有我的游戏窗口,上面有一个标签,上面写着“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() 

很抱歉代码有一半是西类牙语,不过你应该仍然明白发生了什么)。

请您参考如下方法:

我希望这段代码能够帮助您了解如何实现弹出文本对话框。这个例子的工作方式是在主窗口(root)中实现一个按钮,当你点击它时,弹出对话框会出现 MyDialog 类对象,将被创建,然后它会使用 wait_window() 等待它完成。可以看到弹出对话框是如何实现的,很简单TopLevel widget,它就像你能想到的另一个框架,你打包你的标签,你的 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() 

在示例输出中我做了两次。输入 George 和 Sam(我的 friend )作为用户名,每次打开新对话框时用户名都会更新。 输出:

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

编辑: 提交按钮似乎有问题?它有时不想出现。它是可单击的,但在单击之前不会出现。这似乎只是 Mac OS 的问题。

引用文献:effbot , stackoverflow , tutorialspoint , daniweb