我的代码结构有些问题。我正在使用Tkinter并构建GUI。我的想法如下:有一个字段获取文件的路径,当您单击“开始”时,Python将打开路径并将文件加载为csv。然后它将文件存储在具有更多信息的字典中,并返回将传递给其他函数的字典。但是,这如何工作? Button只能运行一个函数,而不能返回任何东西,对吗?

因此,我可以输入(部分填充)的dict作为此输入函数的参数,但是,它永远不会返回。到目前为止,我的解决方案是将其声明为全局变量,因此在函数中对其进行更改时,在外部也进行了更改。但是,现在,我重组了代码并希望重用代码(因为文件是在过程的多个阶段导入的)。现在,当我想再次使用相同的功能时,全局解决方案似乎有问题。有什么想法,如果没有他们我该怎么办?非常感谢。

更新1:

class Topclass:
    def changer(x):
        x += 1


class Subclass(Topclass):
    def __init__(self):
        self.b = 2


obb = Subclass()
print(obb.b)
Topclass.changer(obb.b)
print(obb.b)

最佳答案

@Martineau的建议是正确的,从@BryanOakley的Best way to structure a tkinter application答案中可以学到很多东西。

使用DataTransfer专用对象是一种技术,您可以使用它传递不带tkinter值的框架的变量或数据,或者当您需要数据跨越封装障碍时,无需紧密耦合涉及的对象:

这是一个简单的示例来说明其工作原理:

class DataTransfer:
    """mutable object that is used to transfer data
    """
    def __init__(self, value: int) -> None:
        self.value = value

    def add_one(self) -> None:
        self.value += 1

    def __str__(self) -> str:
        return f'{self.value}'


class Topclass:
    def changer(x: DataTransfer) -> None:
        x.add_one()


class Subclass(Topclass):
    def __init__(self) -> None:
        self.b = DataTransfer(2)


obb = Subclass()
print(obb.b)
Topclass.changer(obb.b)
print(obb.b)

关于python - 用tkinter按钮更改变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56404679/

10-16 08:37