【问题标题】:How to use other variables from other definitions using buttons?如何使用按钮使用来自其他定义的其他变量?
【发布时间】:2015-04-20 05:07:08
【问题描述】:

我希望能够接收通过按下 startgame() 中的按钮设置的名称并将其存储在 getName() 中。但我不知道如何从另一个定义中接收变量。我尽力了,但没有运气?有什么建议吗?

from tkinter import *
root = Tk()

root.wm_title("HangMan")

canvas = Canvas(root, height=400, width=800)
canvas.pack()

def titlescreen():
    title = canvas.create_text(400, 100, font=("Times New Roman", 50), tags="title")
    canvas.itemconfig(title, text="HANGMAN: THE GAME")

    startButton = Button(canvas, text="Start Game", width=10, command=startgame)
    canvas.create_window(400, 200, window = startButton)

    creditsButton = Button(canvas, text="Credits", width=10, command=displaycredits)
    canvas.create_window(400, 250, window = creditsButton)

def startgame():
    canvas.delete(ALL)
    welcome = canvas.create_text(400,100,font=("Times New Roman",50),text="WELCOME!")
    welcome2 = canvas.create_text(400,150,font=("Times New Roman", 30),text="PLEASE ENTER YOUR NAME")


    nameEntry = Entry(canvas)
    enterName = Button(canvas, text="Enter", width=10,command=getName)


    canvas.create_window(350, 200, window = nameEntry)
    canvas.create_window(490, 200, window = enterName)


    nameEntry.delete(0,END)
    nameEntry.insert(0, "Enter Player Name")

    name = nameEntry.get()

    return name


def getName():
    name2 = startgame()
    print (name)
    return name2

def displaycredits():
    canvas.delete(ALL)
    created = canvas.create_text(400,100,font=("Times New Roman",50),text="CREATED BY")
    credit1 = canvas.create_text(400,150,text="Patrick Tsui & Ricardo Perez")
    credit2 = canvas.create_text(400,170,text="Montclair State University Students")
    backButton = Button(canvas,text="Back to Title Screen",width=30,command=backtotitle)
    canvas.create_window(400, 200, window=backButton)

def backtotitle():
    canvas.delete(ALL)
    titlescreen()

def drawPole():
    canvas.delete(ALL)
    a = canvas.create_rectangle(550,50,550,350,fill = "black")
    b = canvas.create_rectangle(350,50,550,50,fill = "black")
    c = canvas.create_rectangle(350,50,350,90,fill = "black")

titlescreen()

root.mainloop()

【问题讨论】:

    标签: python button canvas tkinter


    【解决方案1】:
    ...
    canvas.pack()
    name = '' # initialize a 'name' variable
    

    def startgame():
        def getName(): # define this inside startgame, so we don't need to pass widgets
            global name # tell the program that we're referring to the global variable 'name'
            name = nameEntry.get() # assign the contents of nameEntry to 'name'
            backtotitle() # do something
    
        canvas.delete(ALL)
        welcome = canvas.create_text(400,100,font=("Times New Roman", 50),
        text="WELCOME!")
        welcome2 = canvas.create_text(400,150,font=("Times New Roman", 30),
        text="PLEASE ENTER YOUR NAME")
    
        nameEntry = Entry(canvas)
        enterName = Button(canvas, text="Enter", width=10,
        command=getName) # does not pass widget
    
        canvas.create_window(350, 200, window = nameEntry)
        canvas.create_window(490, 200, window = enterName)
    
        nameEntry.delete(0,END)
        nameEntry.insert(0, "Enter Player Name")
    
        print(name) # for testing, to see the current name
    

    【讨论】:

    • 谢谢! :D 现在可以了。但我确实发现我遇到了一个错误,指出“getName() 采用 0 位置参数,但给出了 1”。我能够通过给 getName 那个参数来纠正这个问题。 def getName(nameEntry): global name name = nameEntry.get()
    • 我的错;我最初将getName 作为一个单独的函数。当我把它放在startgame 中时,我忘了修复enterNamecommand。您应该能够从getName 的定义中删除参数,只需使用command=getName 即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2021-07-29
    • 2014-11-13
    • 2017-07-02
    • 2021-12-17
    • 2013-03-26
    相关资源
    最近更新 更多