линкоры, но не могут быть определены - PullRequest
1 голос
/ 23 октября 2019

Я делаю графический интерфейс для игры на линкорах, но когда код запускается, я получаю сообщение об ошибке:

A1.configure (рельеф = SUNKEN)

NameError: name 'A1'не определено

Я понял, что кнопки были названы внутри функции def, поэтому я сделал их global, но та же ошибка все еще появляется. однако я очень плохо знаком с global и не совсем уверен, что правильно использовал его.

from tkinter import*
import random
import time

##### main
window = Tk()
window.title("battleships")

# makes every button global
global A1
global A2
global A3
global B1
global B2
global B3
global C1
global C2
global C3

# command that places the buttons when the ships are placed
def placeships():
    A1 = Button(window, width=5, height=2, text="A1", command=clickA1).place(x=0, y=0)
    A2 = Button(window, width=5, height=2, text="A2", command=clickA2).place(x=50, y=0)
    A3 = Button(window, width=5, height=2, text="A3", command=clickA3).place(x=100, y=0)
    B1 = Button(window, width=5, height=2, text="B1", command=clickB1).place(x=0, y=50)
    B2 = Button(window, width=5, height=2, text="B2", command=clickB2).place(x=50, y=50)
    B3 = Button(window, width=5, height=2, text="B3", command=clickB3).place(x=100, y=50)
    C1 = Button(window, width=5, height=2, text="C1", command=clickC1).place(x=0, y=100)
    C2 = Button(window, width=5, height=2, text="C2", command=clickC2).place(x=50, y=100)
    C3 = Button(window, width=5, height=2, text="C3", command=clickC3).place(x=100, y=100)

# commands for the buttons
def clickA1():
    A1.configure(relief=SUNKEN)
def clickA2():
    A2.configure(relief=SUNKEN)
def clickA3():
    A3.configure(relief=SUNKEN)
def clickB1():
    B1.configure(relief=SUNKEN)
def clickB2():
    B2.configure(relief=SUNKEN)
def clickB3():
    B3.configure(relief=SUNKEN)
def clickC1():
    C1.configure(relief=SUNKEN)
def clickC2():
    C2.configure(relief=SUNKEN)
def clickC3():
    C3.configure(relief=SUNKEN)

placeships()

правильно ли я использовал global и если да, то почему возникает ошибка?

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Вы не используете global правильно. Вы должны объявить их как глобальные внутри функции:

def placeships():
    global A1, A2, ...
1 голос
/ 23 октября 2019

global изменяет область локального имени на глобальное имя. Таким образом, он должен входить в область, которой назначено имя, а не в саму глобальную область.

def placeships():
    global A1, A2, A3, B1, B2, B3, C1, C2, C3
    A1 = Button(window, width=5, height=2, text="A1", command=clickA1).place(x=0, y=0)
    A2 = Button(window, width=5, height=2, text="A2", command=clickA2).place(x=50, y=0)
    A3 = Button(window, width=5, height=2, text="A3", command=clickA3).place(x=100, y=0)
    B1 = Button(window, width=5, height=2, text="B1", command=clickB1).place(x=0, y=50)
    B2 = Button(window, width=5, height=2, text="B2", command=clickB2).place(x=50, y=50)
    B3 = Button(window, width=5, height=2, text="B3", command=clickB3).place(x=100, y=50)
    C1 = Button(window, width=5, height=2, text="C1", command=clickC1).place(x=0, y=100)
    C2 = Button(window, width=5, height=2, text="C2", command=clickC2).place(x=50, y=100)
    C3 = Button(window, width=5, height=2, text="C3", command=clickC3).place(x=100, y=100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...