我正在使用覆盖菜单编写 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 类的简化版本。