Pyside/PyQt: “全局”组件?

2 投票
1 回答
1043 浏览
提问于 2025-04-18 14:34

我正在用PySide制作一个简单的绘图应用。

主窗口里有一个叫做chart的小部件,它里面放着我的绘图figure

还有其他一些小部件和对话框需要访问这个chart小部件,以便修改figure的属性(比如外观、绘图数据等等)。

目前,我的小部件在初始化的时候需要把chart的实例传给它们……这样做很糟糕,因为这就像在传递一个链条,让很多地方都要知道这个chart的引用。

有没有办法让chart小部件变得“全局可用”,也就是说,任何小部件都能访问它?

我考虑过在主窗口外创建一个chart的单例,这样做有什么不好的地方吗?

1 个回答

2

一种替代方案是通过信号和槽进行沟通。也就是说,主窗口有一些槽(比如画这个,画那个……),而其他每个小部件都有一个信号(我想画这个),然后你把信号和槽连接起来。这种方法可能是最松散耦合的解决方案,我个人比较喜欢。

你可以使用全局变量,这没问题。虽然全局变量本身不太好,但如果这对你来说没什么影响,那就用吧。

最后,user3419537的想法似乎是个不错的主意。你可以把所有相关的小部件放在一个类里,然后把图表小部件作为这个类的一个成员来访问。这可能比使用全局变量要好。

撰写回答