Python - 在模块间更新configparser

0 投票
2 回答
828 浏览
提问于 2025-04-18 13:33

我对Python的配置文件处理方式有些困惑。

我正在创建一个有图形界面的程序(使用PyQt)。这个程序会通过configparser模块从一个.cfg文件中加载一些设置。用户可以通过图形界面的偏好设置小部件来编辑这些设置。当用户关闭偏好设置小部件时,.cfg文件会被保存,但我不知道如何用更新后的设置值来更新程序的其余部分。

我来举个例子说明一下:

  1. 我启动程序。它创建了一个名为config的ConfigParser(),并读取settings.cfg
  2. 程序从config中获取选项'clock_speed'的值(假设是5),并将clkSpd = 5
  3. 我点击编辑 -> 偏好设置,通过QSpinBox将时钟速度改为8
  4. 我关闭偏好设置窗口,settings.cfg被保存,选项'clock_speed'的值现在是8
  5. 但是在模块中,clkSpd仍然是5

我知道我可以每次关闭偏好设置窗口时,重新加载设置,编辑它们,保存,然后再加载所有设置。这种方法简单,但看起来不太优雅。

有没有一种经典而有效的方式来处理可读写的配置文件呢?

提前谢谢你。

2 个回答

0

更新你应用的状态可能并不是一件简单的事情,尤其是在你已经开始使用它的时候。举个例子:

  1. 你的应用就像一辆车。
  2. 你启动应用就像你启动了车。
  3. 你在设置中把变量 type_tyre 设置为 Winter(冬季轮胎)。
  4. 但是你正在运行的应用里,type_tyre 仍然是 Sommer(夏季轮胎)。
  5. 你试图在高速公路上开车的时候换轮胎。
  6. 结果就是崩溃了。

而在启动车之前换轮胎可能是一件简单又安全的事情。

所以你需要写一个程序,让它根据设置的变化来调整应用的状态,但这和初始化应用是不同的,具体还要看应用当前的状态。不过,基本上你只需要写这样一个程序,然后调用它就行了。

0

试着给你的设置小部件加一个回调函数,这样当它关闭时,任何改变的值都能传回程序的其他部分。像这样的事件或信号处理可以参考这个概述,可能对你有帮助。

你可能还需要调整一下这些变量的存储位置,以便能在回调函数中修改它们。这可能是使用全局变量的好机会,或者你可以看看这个SO问题,看看是否可以将变量传递到你的回调函数中进行更新。

撰写回答