【问题标题】:Pyside/PyQt: 'Global' widget?Pyside/PyQt:“全球”小部件?
【发布时间】:2014-07-24 09:36:50
【问题描述】:

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

主窗口有一个 chart 小部件,其中包含我的绘图 figure

还有各种其他小部件和对话框需要访问chart 小部件以更改figure 的属性(外观、绘图数据等...)。

目前,我的小部件需要在初始化时将 chart 的实例传递给它们......这是一种让所有东西都与 chart 对话的糟糕方式,因为有这个引用的链被传递.

有没有办法让chart 小部件“全局”/可从任何小部件访问?

我曾考虑在主窗口之外创建一个 chart 单例 - 有什么理由认为这是个坏主意吗?

【问题讨论】:

  • 把所有东西都放在一个类里,让chart成为这个类的成员怎么样?
  • 这有什么帮助? chart 本身是一个类,继承自 matplotlib 的 FigureCanvas,我相信它是 QWidget 的子类。 chart 当前在我的 Main 类中实例化,这是 QMainWindow 的一个实例,因为这是 chart 小部件“驻留”的地方
  • 这个想法是你在这个类中有方法作用于其他小部件并在需要时提供chart,而不是让它成为每个小部件的成员。也许我误解了您的问题,但使用全局/单例的想法通常表明您可能需要重新考虑代码的结构。 chart 的目的是什么?也许您可以发布一些代码以使您的意图更清晰。

标签: python widget pyqt pyside


【解决方案1】:

另一种选择是通过signals and slots 进行通信,因此主窗口有一些插槽(绘制这个,绘制那个,...),其他每个小部件都有一个信号(我希望绘制这个),然后你连接信号和插槽。这可能是最解耦的解决方案,我更喜欢它。

您可以使用全局变量。没问题。 Global variables are bad 本身,但如果这不打扰你,那就去吧。

最后,user3419537 的想法似乎是一件好事。您可以将属于一个类的所有小部件捆绑在一起,然后以类成员的身份访问图表小部件。这可能比全局更好。

【讨论】:

  • 信号和插槽可能是要走的路。
猜你喜欢
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多