簡體   English   中英

問題銷毀按鈕 Tkinter,NameError

[英]Problem Destroying Button Tkinter, NameError

我對使用 Python 進行編程比較陌生,並且正在使用 Tkinter 構建一個相當簡單的石頭剪刀布游戲。 基本上,我有一個按鈕,調用此 function,在此 function 中,我想銷毀我創建的按鈕,但出現NameError

下面是相關代碼:

def choose(choice):
    if choice == "rock":
        Paper.destroy()
        Scissors.destroy()

def play():
    global Rock
    Rock = Button(root, image = rock_photo, padx = 30, pady = 10, bg = "#fcf003", command = lambda: choose("rock"))
    global Paper
    Paper = Button(root,image = paper_photo, padx = 30, pady = 10, bg = "#c603fc", command=lambda: choose("paper"))
    global Scissors
    Scissors = Button(root,image = scissor_photo, padx = 30, pady = 10, bg = "#39fc03", command=lambda: choose("scissors"))

    Rock.grid(row = 1, column = 0)
    Paper.grid(row = 1, column = 2)
    Scissors.grid(row = 1, column = 1)
play()

此外,錯誤:

NameError: name 'Paper' is not defined

如果我需要提供更多信息,請告訴我。 另外,我正在使用 3.8 解釋器,並且現在還不想使用課程(我知道我將不得不很快開始學習它)。

python function 中的global變量只允許 function 讀取和修改全局 Z31A1FD140BE4BEF2AECA81 中的變量。 它不會創建變量。 假設您的play() function 是您第一次定義RockPaperScissors ,您必須首先在任何 function 之外創建 3 個變量,如下所示:

Rock = None
Paper = None
Scissors = None

然后在您的choose() function 中,添加全局變量,如下所示:

def choose(choice):
    global Rock
    global Paper
    global Scissors
    if choice == "rock":
        Paper.destroy()
        Scissors.destroy()

請參閱Python 中的全局和局部變量

您必須在要使用該全局變量的每個 scope 中包含global關鍵字。這有效:

def choose(choice):
    global Paper
    global Scissors
    if choice == "rock":
        Paper.destroy()
        Scissors.destroy()

但一般來說,對於這樣的事情,我會將對象作為參數傳遞給 function,即:

def choose(choice, paper, scissors):
    if choice == "rock":
        paper.destroy()
        scissors.destroy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM