我正在尝试创建一个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
. 因为QMessageBox
I 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 通常那样)。