0

我正在使用覆盖菜单编写 UI。我已经关注了这个主题(PySide/PyQt Overlay 小部件)以获得解决方案的一个很好的部分。但是,我想通过使用 HBoxLayout 和 VBoxLayout 在此菜单中添加多个按钮/收音机/标签。我的问题是,设置完所有内容后,什么都没有出现。

当我按下菜单按钮后关闭主 UI 时,我也遇到了问题,我的过程以退出代码“-1073740940 (0xC0000374)”结束,但不知道是什么原因造成的。

这是我的简化代码(我刚刚删除了 QPalette 并保留了两个按钮):

import sys

from PySide2 import QtWidgets as Qw
from PySide2 import QtCore as Qc
from PySide2 import QtGui as Qg


class MenuWidgetSignals(Qc.QObject):
    # SIGNALS
    CLOSE = Qc.Signal()

class MenuWidget(Qw.QWidget):
    def __init__(self, parent=None):
        super(MenuWidget, self).__init__(parent)

        self.menu_ui()

    def menu_ui(self):

        # make the window frameless
        self.setWindowFlags(Qc.Qt.FramelessWindowHint)
        self.setAttribute(Qc.Qt.WA_TranslucentBackground)

        s = self.size()
        self.setMinimumSize(500, s.height()-71)

        self.close_btn = self.menu_button()

        self.close_btn.clicked.connect(self.close_menu)

        self.save_btn = self.save_button()
        self.save_btn.clicked.connect(self.save_menu)

        # Layout
        # init GroupBox to limit the width and the height
        menu_grp_box = Qw.QGroupBox(self)
        menu_grp_box.setGeometry(Qc.QRect(0, 70, 500, s.height()-71))

        # init VBoxLayout
        menu_v_box = Qw.QVBoxLayout(menu_grp_box)
        menu_v_box.addStretch(1)
        menu_v_box.setContentsMargins(0, 0, 0, 0)

        # init spacer
        spacer01 = Qw.QSpacerItem(20, 40, Qw.QSizePolicy.Expanding, Qw.QSizePolicy.Minimum)

        # add widgets and items
        menu_v_box.addItem(spacer01)
        menu_v_box.addWidget(self.save_btn)
        menu_v_box.addItem(spacer01)

        menu_grp_box.setLayout(menu_v_box)

        self.SIGNALS = MenuWidgetSignals()

    def menu_button(self):
        """

        Returns:
            QtWidgets.QPushButton: button

        """
        btn = Qw.QPushButton(self, text="To Main")
        btn.setMinimumSize(Qc.QSize(83, 65))

        btn.setToolTip("Close Menu")

        MenuWidget.saving = False

        return btn

    def save_button(self):
        """

        Returns:
            QtWidgets.QPushButton: button

        """
        btn = Qw.QPushButton(self, text="Save")
        btn.setMinimumSize(Qc.QSize(80, 35))
        btn.setToolTip("Saving files and folder settings and close menu")

        return btn

    def close_menu(self):
        self.SIGNALS.CLOSE.emit()

    def save_menu(self):
        MenuWidget.saving = True
        self.close_menu()


class MainWindow(Qw.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.set_ui()

    def set_ui(self):

        self.setFixedSize(1000, 700)

        # init menu button
        menu_btn = self.menu_button()
        menu_btn.setFixedSize(Qc.QSize(83, 65))
        menu_btn.move(0, 0)
        menu_btn.clicked.connect(self.active_menu)

        self.show()

    def menu_button(self):

        btn = Qw.QPushButton(self, text="To Menu")

        btn.setToolTip("Open Menu")

        return btn

    def active_menu(self):
        self._menu_frame = MenuWidget(self)
        self._menu_frame.move(0, 0)
        self._menu_frame.resize(self.width(), self.height())
        self._menu_frame.SIGNALS.CLOSE.connect(self.close_menu)
        self._menu_frame.show()

    def close_menu(self):
        self._menu_frame.close()

if __name__ == '__main__':
    app = Qw.QApplication(sys.argv)
    hyg_window = MainWindow()
    sys.exit(app.exec_())

感谢您花时间阅读我,我真的希望有人可以帮助我。

编辑:我忘了添加导入和信号类。我还添加了我的 MainWindow 类的简化版本。

4

0 回答 0