0

我正在尝试创建一个QMessageBox带有多个按钮和文本的非模式(无模式)窗口。为了使其无模式,我将MainWindow对象作为其父对象(继承自QMainWindow)。

例如:

class MainWindow(QMainWindow):
    ...

    def create_popup(self):
        message_box = QMessageBox(self)
        # add buttons, text, etc.

        message_box.setModal(False)
        message_box.show()

但是,出现的问题是我通过一个样式表提供 MainWindow 的样式,该样式表是从 .ui 文件(使用PyQt5.uic.loadUi('file', main_window))构建的。在 .ui 文件中,我将 MainWindow 的样式表指定为具有background-color: black. 因为QMessageBoxI create 继承自MainWindow,所以它也继承了它的样式表,使框的背景和按钮的背景都变黑。有继承,无模式

我知道我可以手动设置该框的样式,但我希望能够删除父级应用到子级的样式,同时仍保持将其QMessageBox用作无模式弹出窗口的能力。

QMessageBox如果我删除(所以我这样做)的父级message_box = QMessageBox(None),调用show()什么都不做 - 我必须使用exec_(). 但是,这确实会导致具有默认样式的框的预期显示。没有继承,模态

如果我尝试手动覆盖背景颜色属性(使用message_box.setStyleSheet("background-color: grey;")),这会弄乱按钮的样式,并使它们变成矩形框(因为按钮也继承自QMessageBox)。使用自定义样式表

我想这样做,以便 1)应用于我的 MainWindow 的样式不会被 QMessageBox 继承,2)QMessageBox 可以是无模式的,而不是 MainWindow 的子项,或者 3)我可以用完整的样式覆盖样式我的平台默认的样式(包括操作系统和暗模式首选项,就像 Qt 通常那样)。

4

0 回答 0