在两个 QDialogs 之间传播调色板

Posted

技术标签:

【中文标题】在两个 QDialogs 之间传播调色板【英文标题】:Propagate palette between two QDialogs 【发布时间】:2014-07-07 11:48:59 【问题描述】:

我有两个QDialog 类,DialogA 和 DialogB。 DialogA 使用自定义调色板。它包含 DialogB 的一个实例,并在用户按下按钮时将其打开。将调色板从 DialogA 传播到 DialogB 的正确方法是什么?我正在执行以下操作:

class DialogA(QDialog):
    def __init__(self,parent=None):
        super(DialogA, self).__init__(parent)
        # Palette setup in this class
        ...
        DialogB = DialogB(self)

class DialogB(QDialog):
    def __init__(self,parent=None):
        super(DialogB, self).__init__(parent)
        if parent != None:
            self.setPalette(parent.pallete())

有没有比检查if parent != None 更好的方法?我很挑剔,不想让 if 语句执行这个逻辑。如果我自己调用 DialogB,parent == None 所以我不能调用parent.pallete()

【问题讨论】:

你必须使用信号和槽,你可以在***.com/questions/9689053/…看到。 我看不出信号和插槽如何帮助设置调色板 【参考方案1】:

为什么不直接给DialogB的构造函数加个参数呢?

class DialogA(QDialog):
    def __init__(self,parent=None):
        super(DialogA, self).__init__(parent)
        # Palette setup in this class
        ...
        DialogB = DialogB(self, palette)

class DialogB(QDialog):
    def __init__(self, palette, parent=None):
        super(DialogB, self).__init__(parent)
        self.setPalette(palette)

【讨论】:

我也可以这样做,但我会将其默认为 None,这与 if 带有父级的语句类似。我只是想确保我不会错过每个人都使用的一些约定。 只要您尝试调用默认为 None 的参数的方法,您要么必须像正在做的那样执行某种检查,要么将受影响的代码包含在 try/除了块。

以上是关于在两个 QDialogs 之间传播调色板的主要内容,如果未能解决你的问题,请参考以下文章

如何从 QWidget 中删除 QPalette

如何实现两个可排序的剑道:一个带有固定元素(调色板对象),另一个带有每个元素的副本

unity 在项目中调用调色板修改物体材质颜色,该怎么办?

如何从调色板中进行颜色渐变

VS Code UI语言不会传播到python扩展命令面板

Flowable入门系列文章81 - 自定义调色板 01