【发布时间】:2021-04-21 19:07:48
【问题描述】:
screen = None #is defined outside of any function
def main():
pygame.init()
font = pygame.font.SysFont("Arial", 20)
img_logo = pygame.image.load("gfx\Logo.png")
img_logo = pygame.transform.smoothscale(img_logo, (30, 30))
pygame.display.set_icon(img_logo)
pygame.display.set_caption("Title")
global screen # is set as global
screen = pygame.display.set_mode((res)) #this works as intended and displays correctly
running = True
load.Menu(screen, res)
#----MAIN LOOP
while running:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONUP:
Eventhandler.onClick()
if event.type == pygame.QUIT:
running = False
pygame.display.update()
class Button:
global screen
print(screen) # returns None
def __init__(self, img, pos, size):
self.img = img
self.pos = pos
self.size = size
当我在这样的单独文件中定义 Button 类的实例时:
button_start = Main.Button("button_start",[200, 550], [230, 100])
类中的 print(screen) 返回None,这意味着它无法访问screen,即使它在类的开头被声明为全局。似乎main() 只使用了一个本地实例,它实际上并没有改变函数外部的变量。但这意味着global screen 不起作用。
我错过了什么?这不是全局语句的工作方式吗?因为从我读到的内容来看,如果我在该函数中使用该语句,我应该能够在全局范围内更改变量,即使是在函数内本地也是如此。
【问题讨论】:
-
global screen不是“在函数中”(Button.__init_)。类属性会立即评估,但不会在创建第一个对象时评估。
标签: python python-3.x pygame