PyQt5 GUI 응용 프로그램이 있는데 팝 아웃 창을 만들려고합니다. 메인 윈도우의 버튼으로 호출되는 클래스 sideWindow
을 만들었습니다. 이 코드는 기본 GUI 창에서 sideWindow
이 처음 호출 될 때 올바르게 작동합니다. 나는 sideWindow
를 닫고 다시 열 경우, 나는 엉망 오류 및 윈도우의 포맷을 취득 :PyQt5 팝업 창 오류 : QWidget :: setLayout : 이미 레이아웃이있는 QLayout을 설정하려고 시도했습니다.
QWidget::setLayout: Attempting to set QLayout "" on sideWindow "", which already has a layout
나는이에서 가정이 레이아웃은 이미 개방의 처음에 설정되어 있기 때문에 , 다시 설정할 필요가 없습니다. 그러나이 오류를 피하기 위해 sideWindow
클래스의 어느 비트를 변경해야하는지 잘 모르겠습니다. sideWindow
클래스에서 clearLayout
설정을 시도했지만 도움이되지 않았습니다. #Sergey에 의해 제안
class sideWindow(QWidget):
def __init__(self, parent):
super().__init__()
self.viewer = parent
def initiateMenuBar(self):
self.setWindowTitle('Phasing')
self.setWindowModality(Qt.ApplicationModal)
MenuBar = QVBoxLayout()
self.labels = {
'phase 0': QLabel('Phase 0', self),
}
self.inputs = {
'phase 0 sl': QSlider(Qt.Horizontal),
'phase 0': QDoubleSpinBox(self),
}
for i in self.inputs.values():
i.installEventFilter(self)
class dividor(QFrame):
def __init__(self, parent):
QFrame.__init__(self, parent)
self.setFrameShape(QFrame.HLine)
self.setLineWidth(3)
self.setFrameShadow(QFrame.Raised)
self.show()
self.inputs['phase 0'].valueChanged.connect(self.inputs['phase 0 sl'].setValue)
self.inputs['phase 0 sl'].valueChanged.connect(self.inputs['phase 0'].setValue)
MenuBar.addWidget(self.labels['phase 0'])
MenuBar.addWidget(self.inputs['phase 0'])
MenuBar.addWidget(self.inputs['phase 0 sl'])
MenuBar.addWidget(dividor(self))
MenuBar.addStretch(1)
self.inputs['phase 0'].setValue(0)
return MenuBar
def setupWindow(self):
MenuBar = self.initiateMenuBar()
grid = QGridLayout()
grid.setSpacing(10)
grid.addLayout(MenuBar, 0, 0, 1, 2)
self.setLayout(grid)
self.setGeometry(0, 0, 400, 100)
self.show()
[mcve] – eyllanesc
을 제공하십시오. setupWindow 메소드를 정의하여 sideWindow를 정의하고 표시하십시오. sideWindow가 정의 된 후이를 표시하는 메서드가 하나 더 정의되었습니다. setupWindow에서 self.show()를 제거하고 별도로 show를 호출 할 수 있습니다. 그런 다음 setupWindow를 한 번만 호출하고 필요한만큼 여러 번 표시합니다. – Sergey
이것은 정말 도움이되는 설명 인 #Sergey이며 해결책을 제시해주었습니다. 아래에 내 대답을 올렸습니다. – 218