与python全局变量混淆,pygame事件

时间:2015-07-09 09:01:21

标签: python pygame global-variables

我已经阅读了关于这个主题的其他几个问题,但我似乎还没有让python全局变量起作用。

我有三个文件:main.py,menu.py和game.py.

menu.py包含一个由main执行的菜单功能;主要有一个'运行'主循环的变量,我希望其他文件中的函数能够将其设置为0以退出游戏。

但我无法让它发挥作用;例如,如果我这样做:

menu.py

...
class gameMenu():
def __init__(self, screen, background):
    #self.event = event
    global running

...
running = 0

main.py

...
from menu import *
...
global running
running = 1

title = gameMenu(screen, background)
title.run()
...
print running

但是,main将始终打印1.如何获取菜单来修改main中的运行变量?

另外,在菜单循环中我有这个功能:

for e in pygame.event.get():

         if e.type == pygame.QUIT:
            print 'Close!'
            self.isRunning = 0
            running = 0

         if e.type == pygame.JOYBUTTONDOWN:
            print 'Button Down!'
            self.isRunning = 0

这个代码在另一个程序中工作得很好,但是在这个程序中第二个如果永远不会执行,老实说我不明白为什么。

如果您需要完整的代码,请访问:http://dumptext.com/KuwcaWpH

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在您的代码中,您无法将全局变量runningmain.py导入menu.py。当你这样做 -

if e.type == pygame.QUIT:
   print 'Close!'
   self.isRunning = 0
   running = 0

您只是将本地名称(变量)设置为0,这不会影响running中的main.py变量。您可能希望将以下行添加到函数的开头 - def run(self):

def run(self):
    global running
    self.isRunning = 1

此外,您似乎在running = 1中定义main.py,这可能会影响您要从running导入的menu.py全局变量。尝试删除该行。或者最好的办法是 -

import menu

然后以 - menu.running

的形式访问全局变量

答案 1 :(得分:1)

Python中的

Global变量实际上只在单个文件的范围内。该关键字用于允许本地范围(如函数和循环)将值分配给更宽范围的变量。

从文件到文件时,导入是您实际想要使用的内容。导入允许您查看来自另一个脚本的变量,而不仅仅是函数和对象。它也允许你分配给他们。虽然这些作业不会影响脚本,因为它保存在驱动器上,但它可以更改running之类的值。

所以你可以做到

from menu import running

然后检查并分配其值。或者,如果您刚刚使用import menu,请使用running引用menu.running