Variables linux上Python2.7中的奇怪变量问题(pygame/pillow)
我正在使用python,但有一个奇怪的问题:Variables linux上Python2.7中的奇怪变量问题(pygame/pillow),variables,pygame,python-imaging-library,Variables,Pygame,Python Imaging Library,我正在使用python,但有一个奇怪的问题: pygame.init() f = 1 def setf(widget, buttonToggled): f = int(buttonToggled) def getf(): if f == 1: return ImageFilter.BLUR if f == 2: return ImageFilter.CONTOUR if f == 3: return ImageFilter.DETAIL if f ==
pygame.init()
f = 1
def setf(widget, buttonToggled):
f = int(buttonToggled)
def getf():
if f == 1: return ImageFilter.BLUR
if f == 2: return ImageFilter.CONTOUR
if f == 3: return ImageFilter.DETAIL
if f == 4: return ImageFilter.EDGE_ENHANCE
if f == 5: return ImageFilter.EMBOSS
if f == 6: return ImageFilter.SMOOTH
if f == 7: return ImageFilter.SHARPEN
def doFilter(widget, buttonToggled):
global ip
if winBook.get_current_page() == 2 and f == 1:
ip = pygame.image.fromstring(Image.fromstring("RGBA",(320,294),pygame.image.tostring(ip, "RGBA")).filter(getf()).convert("RGBA").tostring("raw", "RGBA"), (320,294), "RGBA")
upd()
applyButton.connect("clicked", doFilter, f)
filterBlur.connect("toggled", setf, 1)
filterContour.connect("toggled", setf, 2)
filterDetail.connect("toggled", setf, 3)
filterEE.connect("toggled", setf, 4)
filterEmboss.connect("toggled", setf, 5)
filterSmooth.connect("toggled", setf, 6)
filterSharpen.connect("toggled", setf, 7)
当然,我显然是从一个gtk.Builder,从一个glade文件创建了这些对象。我还有一个名为“ip”的pygame图像和一个pygame窗口
我的问题是,当我切换filterBlur(单选按钮)之外的按钮时,出于某种原因,getf仍然返回ImageFilter.BLUR。我之前已经将printf放入setf和getf中,它们都返回正确的值。我太笨了,无法用线程进行调试(一个线程不断地报告f,而另一个线程运行程序)。发生了什么事?f是变回1还是在getf中?您需要在
setf
中放入一个global f
语句。否则,f
setter函数只会创建一个局部变量