class LabelWindow(QDialog): def __init__(self, parent): super(LabelWindow, self).__init__(parent) self.test_layout = QGridLayout() label = QLabel("Label") self.test_layout.addWidget(label, 0, 0) self.setLayout(self.test_layout) self._destroyCalled = False def replace(self, unit): old_item = self.test_layout.itemAtPosition(0, 0) old_label = old_item.widget() ref = weakref.ref(old_item, self._destroyed) self.test_layout.removeWidget(old_label) unit.assertRaises(RuntimeError, old_item.widget) del old_item label = QLabel("Label New") old_label.deleteLater() label.setAlignment(Qt.AlignCenter) self.test_layout.addWidget(label, 0, 0) def _destroyed(self, obj): self._destroyCalled = True
class AllInputsPanel(QWidget): inputSelected = Signal(Input) def __init__(self, switcherState, parent=None): super(AllInputsPanel, self).__init__(parent) self.switcherState = switcherState self.selectedInput = None self.page = 0 self.sources = [] self.layout = QGridLayout() self.input_buttons = QButtonGroup() self.btnPageUp = ExpandingButton() self.btnPageUp.setIcon(QIcon(":icons/go-up")) self.btnPageUp.clicked.connect(lambda: self.setPage(self.page - 1)) self.layout.addWidget(self.btnPageUp, 0, 5, 3, 1) self.btnPageDown = ExpandingButton() self.btnPageDown.setIcon(QIcon(":icons/go-down")) self.btnPageDown.clicked.connect(lambda: self.setPage(self.page + 1)) self.layout.addWidget(self.btnPageDown, 3, 5, 3, 1) for col in range(5): self.layout.setColumnStretch(col, 1) for row in range(3): btn = InputButton(None) self.layout.addWidget(btn, row * 2, col, 2, 1) self.input_buttons.addButton(btn) btn.clicked.connect(self.selectInput) btn.setFixedWidth(120) self.setLayout(self.layout) self.switcherState.inputsChanged.connect(self.setSources) self.setSources() self.displayInputs() def setSources(self): self.sources = [ vs for vs in VideoSource if vs in self.switcherState.inputs.keys() ] def displayInputs(self): idx = 0 start = self.page * 15 end = start + 15 self.input_buttons.setExclusive(False) for btn in self.input_buttons.buttons(): btn.hide() btn.setChecked(False) self.input_buttons.setExclusive(True) for vs in self.sources[start:end]: inp = self.switcherState.inputs[vs] row = (idx / 5) * 2 col = idx % 5 btn = self.layout.itemAtPosition(row, col).widget() btn.setInput(inp) btn.setChecked(inp == self.selectedInput) btn.show() idx += 1 self.btnPageUp.setEnabled(self.page > 0) self.btnPageDown.setEnabled(end < len(self.switcherState.inputs)) def setPage(self, page): self.page = page self.displayInputs() def selectInput(self): inputBtn = self.sender() self.selectedInput = inputBtn.input self.inputSelected.emit(inputBtn.input)
class AdvancedCameraControl(ScreenWithBackButton): def __init__(self, controller, cameraID, mainScreen): self.controller = controller self.cameraID = cameraID super(AdvancedCameraControl, self).__init__(cameraID, mainScreen) def makeContent(self): layout = QGridLayout() self.posDisplay = QGridLayout() self.posDisplay.addWidget(QLabel("Pan:"), 0, 0) self.posDisplay.addWidget(QLabel("Tilt:"), 1, 0) self.posDisplay.addWidget(QLabel("Zoom:"), 2, 0) self.posDisplay.addWidget(QLabel(), 0, 1) self.posDisplay.addWidget(QLabel(), 1, 1) self.posDisplay.addWidget(QLabel(), 2, 1) layout.addLayout(self.posDisplay, 1, 0) btnGetPos = ExpandingButton() btnGetPos.setText("Get Position") btnGetPos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) layout.addWidget(btnGetPos, 2, 0) btnGetPos.clicked.connect(self.displayPosition) whiteBalanceGrid = QGridLayout() wbTitle = QLabel("White Balance") wbTitle.setAlignment(Qt.AlignCenter) whiteBalanceGrid.addWidget(wbTitle, 0, 0, 1, 2) btnAuto = OptionButton() btnAuto.setText("Auto") btnAuto.clicked.connect(lambda: self.controller.whiteBalance(self.cameraID, CameraWhiteBalance.Auto)) whiteBalanceGrid.addWidget(btnAuto, 1, 0) btnIndoor = OptionButton() btnIndoor.setText("Indoor") btnIndoor.clicked.connect(lambda: self.controller.whiteBalance(self.cameraID, CameraWhiteBalance.Indoor)) whiteBalanceGrid.addWidget(btnIndoor, 2, 0) btnOutdoor = OptionButton() btnOutdoor.setText("Outdoor") btnOutdoor.clicked.connect(lambda: self.controller.whiteBalance(self.cameraID, CameraWhiteBalance.Outdoor)) whiteBalanceGrid.addWidget(btnOutdoor, 3, 0) btnOnePush = OptionButton() btnOnePush.setText("One Push") btnOnePush.clicked.connect(lambda: self.controller.whiteBalance(self.cameraID, CameraWhiteBalance.OnePush)) whiteBalanceGrid.addWidget(btnOnePush, 4, 0) btnOnePushTrigger = ExpandingButton() btnOnePushTrigger.setText("Set") btnOnePushTrigger.clicked.connect(lambda: self.controller.whiteBalance(self.cameraID, CameraWhiteBalance.Trigger)) btnOnePushTrigger.setEnabled(False) whiteBalanceGrid.addWidget(btnOnePushTrigger, 4, 1) self.wbOpts = QButtonGroup() self.wbOpts.addButton(btnAuto, 1) self.wbOpts.addButton(btnIndoor, 2) self.wbOpts.addButton(btnOutdoor, 3) self.wbOpts.addButton(btnOnePush, 4) self.wbOpts.buttonClicked.connect(lambda: btnOnePushTrigger.setEnabled(self.wbOpts.checkedId() == 4)) layout.addLayout(whiteBalanceGrid, 1, 1, 2, 1) return layout def displayPosition(self): pos = self.controller.getPosition(self.cameraID) self.posDisplay.itemAtPosition(0, 1).widget().setText(str(pos.pan)) self.posDisplay.itemAtPosition(1, 1).widget().setText(str(pos.tilt)) self.posDisplay.itemAtPosition(2, 1).widget().setText(str(pos.zoom))