helpmee282
@helpmee282
нито

Как исправить ошибку которая возникла из за неправильного построения программы?

Решил написать программу на Python.
Обьявил переменную в функции init под названием self.screen
она сохранилась в классе App
и когда в функции run я использовал переменную App.screen
вылезла ошибка(
сама ошибка :
61a89eb8dff54247893791.png

исходный код :

from os import environ
environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1' # Mute
import pygame as app # Main module
from pygame.locals import *
import os as os, sys as sys # System module
import time as time, random as random # Other module

# Settings
app.init()
clock = app.time.Clock()
font_basic = app.font.SysFont(None, 36)
font_addon = None
white = (255, 255, 255)
black = (0, 0, 0)

class App():
    def Terminate():
        app.quit()
        sys.exit()
    def Text(text, font, color,surface ,x, y):
        text = font.render(str(text), True, color)
        text_rect = text.get_rect()
        text_rect.topleft = (x, y)
        surface.blit(text, text_rect)
        return text, text_rect
    def init(self):
        self.resolution = self.width, self.hight = (800, 450)
        self.screen = app.display.set_mode(self.resolution, app.SCALED) # Переменная
        app.display.set_caption("NRen")
        app.display.set_icon(app.image.load('icon.png'))
    def run(self):
        while True:
            App.Text("Ку, это тестовое сообщение)", font_basic, white, App.screen, 800, 450) # Тут ошибка
            for i in app.event.get():
                if i.type == QUIT:
                    App.Terminate()
                if i.type == KEYDOWN:
                    if i.key == K_ESCAPE:
                        App.Terminate()
            app.display.update()
application = App()
application.init()
application.run()
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
Tomio
@Tomio
backend developer (python, php)
Атрибут screen у вас создаётся только в момент создания экземпляра класса (application = App()) и вызова метода init(). Если пробовать его вызывать как вы - App.screen - ваш класс о нём ничего не знает.
Вам нужно заменить App.screen на self.screen.

P.S. и лучше переименовать init() в __init()__, тогда вам отдельно не нужно будет вызывать этот метод.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы