1

我正在使用 Python 和 Kivy 编写应用程序。我有一个绘制图像并将其导出为 png 的函数。我正在尝试使用该图像并将其作为 BLOB 保存在 sql db 中。

我尝试采用的方法是使用 BytesIO 将 png 转换为流,然后将此值(字符串)放入一个变量中,然后我可以将其发送到数据库。

我遇到的问题是,在“本地”函数中,我能够将 png 对象转换为流并打印它,但是当我尝试在函数之外打印相同的变量时,它返回空。

任何洞察力帮助将不胜感激!我认为这是因为我使用函数的内存来转换 png>IO 并且离开函数时它不喜欢它。或者,如果您有任何更好的解决方案,我会全力以赴。

 def savevar(self):
        global driversig
        data = io.BytesIO(open("B.png","r+b").read())
        test = (data.getvalue())

#i've also tried wrapping this in a str() but getvalue() is a string so shouldn't matter?

        driversig = test
        print(driversig)
#this prints fine.

当我在这个函数之外尝试print(driversig)它返回空

我也试过print(str(driversig))

我的全局变量为空。driversig = ''只是以防你想知道。打印时我也没有收到任何错误

4

1 回答 1

0

所以我发现了这个问题:

driversig = ''是全球性的

def savevar(self):
        global driversig
        data = open("B.png","r+b").read()
        test = (data.getvalue())    

        driversig = str(test)
#       ^^ this *change* is now for the local variable and is not effecting the global variable

        print(driversig)
#       ^^ hence why this prints correctly

全局变量driversig仍然是一个空字符串,我正在尝试调用这个driversig包含全局字节(作为字符串)的本地变量;但实际上我调用的是 emtpy 全局变量。

对不起各位,谢谢!

于 2019-04-20T10:51:12.380 回答