class HeaderFrame(QFrame): """ Clickable frame with title. """ class AbstractHeaderFrameItem(QFrame): def __init__(self, parent): super(__class__, self).__init__(parent) self.setContentsMargins(0, 0, 0, 0) self.setLayout(QHBoxLayout()) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().setSpacing(0) def clearLayout(self): while self.layout().count(): child = self.layout().takeAt(0) if child.widget(): child.widget().deleteLater() def setCentralWidget(self, widget: QWidget): self.clearLayout() self.layout().addWidget(widget) def refresh(self): pass class VSepItem(AbstractHeaderFrameItem): def __init__(self, parent): super(__class__, self).__init__(parent) self.setCentralWidget(VSep(self)) class HSpacerItem(AbstractHeaderFrameItem): def __init__(self, parent): super(__class__, self).__init__(parent) self.setCentralWidget(HSpacer(self)) arrowClicked = pyqtSignal() upButtonClicked = pyqtSignal() downButtonClicked = pyqtSignal() configButtonClicked = pyqtSignal() closeButtonClicked = pyqtSignal() def __init__(self, parent: 'ui.widget.CollapsibleFrame'): super(__class__, self).__init__(parent) self._parent = parent self.setMinimumHeight(26) self.setMaximumHeight(26) self.indicateError(False) self._hlayout = QHBoxLayout() self._hlayout.setContentsMargins(0, 0, 0, 0) self._hlayout.setSpacing(0) self._arrow = None self._hlayout.addWidget(self._init_header_frame(parent.isCollapsed())) self.setLayout(self._hlayout) def _init_header_frame(self, collapsed: bool): self._frm_header = QFrame(self) self._frm_header.setMinimumHeight(24) self._frm_header.setMaximumHeight(24) frm_header_layout = QHBoxLayout(self) frm_header_layout.setContentsMargins(0, 0, 0, 0) frm_header_layout.addWidget(self._init_arrow(collapsed)) background_color = self._frm_header.palette().color(self._frm_header.backgroundRole()) self._frm_header.setStyleSheet("QFrame { border:0px; background:" + background_color.darker(96).name() + "; }") self._frm_header.setLayout(frm_header_layout) return self._frm_header def _init_arrow(self, collapsed): self._arrow = CollapsibleFrame.Arrow(self, collapsed=collapsed) self._arrow.setMinimumWidth(24) self._arrow.setMaximumWidth(24) self._arrow.setStyleSheet("border:0px") return self._arrow def addWidget(self, header_item: AbstractHeaderFrameItem): self._frm_header.layout().addWidget(header_item) def refresh(self): """ Refreshes the header model (e.g. line-count, character-count, etc.). """ for i in range(self._frm_header.layout().count()): widget = self._frm_header.layout().itemAt(i).widget() if isinstance(widget, CollapsibleFrame.HeaderFrame.AbstractHeaderFrameItem): widget.refresh() def indicateError(self, status: bool): """ Indicates an error by painting the title-border red. Otherweise black. """ if status: self.setStyleSheet("QFrame { border:1px solid red; }") else: self.setStyleSheet("QFrame { border:1px solid rgb(41, 41, 41); }") def mouseReleaseEvent(self, event): if self.underMouse() and event.button() == QtCore.Qt.LeftButton: # The arrow (or something non-button like) was clicked self.arrowClicked.emit() return super(CollapsibleFrame.HeaderFrame, self).mousePressEvent(event)
def initWin(self): iptGrid = QGridLayout() title = Text("TSP", (255, 0, 0), 16, "center") pic = QPixmap("C:\\tsp.png") picLbl = QLabel() picLbl.setPixmap(pic) picLbl.setScaledContents(True) titleLayout = QVBoxLayout() titleLayout.addWidget(title) titleLayout.addWidget(picLbl) titleFrame = QFrame() titleFrame.setFrameShape(QFrame.StyledPanel) titleFrame.setAutoFillBackground(True) p5 = titleFrame.palette() p5.setColor(titleFrame.backgroundRole(), QColor(255, 255, 255)) titleFrame.setPalette(p5) titleFrame.setLayout(titleLayout) iptTitle = Text("Program Input", (255, 0, 0), 12, "center") iptTxt1 = QLabel("Cities No:") iptTxt1.setFont(QFont("Decorative", 12)) iptTxt2 = QLabel("start:") iptTxt2.setFont(QFont("Decorative", 12)) self.iptEdt1 = QLineEdit() self.iptEdt1.textChanged[str].connect(self.get_input) self.iptEdt2 = QLineEdit() self.iptEdt2.textChanged[str].connect(self.get_input) self.iptBtn1 = QPushButton("Build") self.iptBtn1.clicked.connect(self.bulid_map) self.iptBtn2 = QPushButton("Rturn") self.iptBtn2.clicked.connect(self.get_initial) iptH = QHBoxLayout() iptH.addWidget(self.iptBtn1) iptH.addWidget(self.iptBtn2) iptGrid.addWidget(iptTitle, 1, 0, 1, 5) iptGrid.addWidget(iptTxt1, 2, 0) iptGrid.addWidget(self.iptEdt1, 2, 1) iptGrid.addWidget(iptTxt2, 3, 0) iptGrid.addWidget(self.iptEdt2, 3, 1) iptGrid.setVerticalSpacing(10) iptV = QVBoxLayout() iptV.addLayout(iptGrid) iptV.addLayout(iptH) iptFrame = QFrame() iptFrame.setAutoFillBackground(True) p6 = iptFrame.palette() p6.setColor(iptFrame.backgroundRole(), QColor(220, 225, 255)) iptFrame.setPalette(p6) iptFrame.setFrameShape(QFrame.StyledPanel) iptFrame.setLayout(iptV) srgGrid = QGridLayout() #srgGrid.setVerticalSpacing(10) srgTitle = Text("Algorithms", (255, 0, 0), 12, "center") self.srgBtn1 = QPushButton("Genetic") self.srgBtn1.clicked.connect(self.run_algorithm) self.srgBtn2 = QPushButton("Simulated") self.srgBtn2.clicked.connect(self.run_algorithm) self.srgBtn3 = QPushButton("Tabu") self.srgBtn3.clicked.connect(self.run_algorithm) self.srgBtn4 = QPushButton("reset") self.srgBtn4.clicked.connect(self.reset) srgGrid.addWidget(srgTitle, 1, 0, 1, 6) srgGrid.addWidget(self.srgBtn1, 2, 1, 2, 4) srgGrid.addWidget(self.srgBtn2, 3, 1, 3, 4) srgGrid.addWidget(self.srgBtn3, 4, 1, 4, 4) srgGrid.addWidget(self.srgBtn4, 5, 1, 5, 4) srgFrame = QFrame() srgFrame.setFrameShape(QFrame.StyledPanel) srgFrame.setAutoFillBackground(True) p7 = srgFrame.palette() p7.setColor(srgFrame.backgroundRole(), QColor(255, 255, 255)) srgFrame.setPalette(p7) srgFrame.setLayout(srgGrid) otpGrid = QGridLayout() otpTitle = Text("Program Output", (255, 0, 0), 12, "center") otpTxt1 = QLabel("The Cost") otpTxt1.setFont(QFont("Decorative", 12)) self.lcd1 = QLCDNumber() otpGrid.addWidget(otpTitle, 1, 0, 1, 2) otpGrid.addWidget(otpTxt1, 2, 0) otpGrid.addWidget(self.lcd1, 2, 1) otpFrame = QFrame() otpFrame.setFrameShape(QFrame.StyledPanel) otpFrame.setAutoFillBackground(True) p8 = otpFrame.palette() p8.setColor(otpFrame.backgroundRole(), QColor(220, 225, 255)) otpFrame.setPalette(p8) otpFrame.setLayout(otpGrid) splitter1 = QSplitter(Qt.Vertical) splitter1.addWidget(titleFrame) splitter1.addWidget(iptFrame) splitter1.setSizes([240, 135]) splitter2 = QSplitter(Qt.Vertical) splitter2.addWidget(srgFrame) splitter2.addWidget(otpFrame) splitter2.setSizes([200, 92]) splitter3 = QSplitter(Qt.Vertical) splitter3.addWidget(splitter1) splitter3.addWidget(splitter2) splitter3.setSizes([382, 291]) splitter3.resize(260, 685) splitter3.move(1100, 5) splitter3.setParent(self) splitter3.setAutoFillBackground(True) p3 = splitter3.palette() p3.setColor(splitter3.backgroundRole(), QColor(255, 255, 255)) splitter3.setPalette(p3) self.mapFrame = QFrame() self.mapFrame.setFrameShape(QFrame.StyledPanel) self.mapFrame.move(5, 5) self.mapFrame.resize(1090, 685) self.mapFrame.setParent(self) self.setAutoFillBackground(True) p2 = self.palette() p2.setColor(self.backgroundRole(), QColor(0, 0, 0)) self.setPalette(p2) self.mapFrame.setParent(self) self.hint = Text("Click the bulid button to bulid a random map", (255, 0, 0), 23, "center") self.hint.move(230, 100) self.hint.setParent(self) self.setWindowTitle("TSP") self.width = QDesktopWidget().availableGeometry().width() self.height = QDesktopWidget().availableGeometry().height() - 40 self.resize(self.width, self.height) self.show() self.nodes = {} self.points = {} self.flag = True
def main(): MAX_INTENSITY = 255 app = QApplication([]) # Create and lay out widgets. redLabel = QLabel('Red:') redLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) redLabel.setAutoFillBackground(True) p = redLabel.palette() p.setColor(redLabel.backgroundRole(), Qt.red) redLabel.setPalette(p) greenLabel = QLabel('Green:') greenLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) greenLabel.setAutoFillBackground(True) p = greenLabel.palette() p.setColor(greenLabel.backgroundRole(), Qt.green) greenLabel.setPalette(p) blueLabel = QLabel('Blue:') blueLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) blueLabel.setAutoFillBackground(True) p = blueLabel.palette() p.setColor(blueLabel.backgroundRole(), Qt.blue) blueLabel.setPalette(p) redSlider = QSlider(Qt.Horizontal) redSlider.setMinimum(0) redSlider.setMaximum(MAX_INTENSITY) greenSlider = QSlider(Qt.Horizontal) greenSlider.setMinimum(0) greenSlider.setMaximum(MAX_INTENSITY) blueSlider = QSlider(Qt.Horizontal) blueSlider.setMinimum(0) blueSlider.setMaximum(MAX_INTENSITY) redLineEdit = QLineEdit('0') greenLineEdit = QLineEdit('0') blueLineEdit = QLineEdit('0') controlFrameLayout = QGridLayout() controlFrameLayout.setSpacing(0) controlFrameLayout.setContentsMargins(0, 0, 0, 0) controlFrameLayout.setRowStretch(0, 0) controlFrameLayout.setRowStretch(1, 0) controlFrameLayout.setRowStretch(2, 0) controlFrameLayout.setColumnStretch(0, 0) controlFrameLayout.setColumnStretch(1, 1) controlFrameLayout.setColumnStretch(2, 0) controlFrameLayout.addWidget(redLabel, 0, 0) controlFrameLayout.addWidget(greenLabel, 1, 0) controlFrameLayout.addWidget(blueLabel, 2, 0) controlFrameLayout.addWidget(redSlider, 0, 1) controlFrameLayout.addWidget(greenSlider, 1, 1) controlFrameLayout.addWidget(blueSlider, 2, 1) controlFrameLayout.addWidget(redLineEdit, 0, 2) controlFrameLayout.addWidget(greenLineEdit, 1, 2) controlFrameLayout.addWidget(blueLineEdit, 2, 2) controlFrame = QFrame() controlFrame.setLayout(controlFrameLayout) colorFrame = QFrame() colorFrame.setAutoFillBackground(True) p = colorFrame.palette() p.setColor(colorFrame.backgroundRole(), Qt.black) colorFrame.setPalette(p) centralFrameLayout = QGridLayout() centralFrameLayout.setSpacing(0) centralFrameLayout.setContentsMargins(0, 0, 0, 0) centralFrameLayout.setRowStretch(0, 1) centralFrameLayout.setRowStretch(1, 0) centralFrameLayout.setColumnStretch(0, 1) centralFrameLayout.addWidget(colorFrame, 0, 0) centralFrameLayout.addWidget(controlFrame, 1, 0) centralFrame = QFrame() centralFrame.setLayout(centralFrameLayout) window = QMainWindow() window.setWindowTitle('Color Displayer') window.setCentralWidget(centralFrame) screenSize = QDesktopWidget().screenGeometry() window.resize(screenSize.width() // 2, screenSize.height() // 2) # Handle events for the QSlider objects. def sliderSlot(): r = redSlider.value() g = greenSlider.value() b = blueSlider.value() redLineEdit.setText(str(r)) greenLineEdit.setText(str(g)) blueLineEdit.setText(str(b)) p = colorFrame.palette() p.setColor(colorFrame.backgroundRole(), QColor(r, g, b)) colorFrame.setPalette(p) redSlider.valueChanged.connect(sliderSlot) greenSlider.valueChanged.connect(sliderSlot) blueSlider.valueChanged.connect(sliderSlot) # Handle events for the LineEdit objects. def lineEditSlot(): try: r = int(redLineEdit.text()) g = int(greenLineEdit.text()) b = int(blueLineEdit.text()) if (r < 0) or (r > MAX_INTENSITY): raise Exception() if (g < 0) or (g > MAX_INTENSITY): raise Exception() if (b < 0) or (b > MAX_INTENSITY): raise Exception() redSlider.setValue(r) greenSlider.setValue(g) blueSlider.setValue(b) p = colorFrame.palette() p.setColor(colorFrame.backgroundRole(), QColor(r, g, b)) colorFrame.setPalette(p) except: # Use the Slider objects to restore the LineEdit objects. redLineEdit.setText(str(redSlider.value())) greenLineEdit.setText(str(greenSlider.value())) blueLineEdit.setText(str(blueSlider.value())) redLineEdit.returnPressed.connect(lineEditSlot) greenLineEdit.returnPressed.connect(lineEditSlot) blueLineEdit.returnPressed.connect(lineEditSlot) window.show() exit(app.exec_())
class F(QWidget): def __init__(self): super().__init__() self.setUI() def setUI(self): self.setGeometry(500, 400, 500, 600) self.setWindowTitle("Table") self.Qf = QFrame(self) self.Qf.setGeometry(100, 10, 300, 300) self.Qs = QSlider(Qt.Horizontal, self) self.Qs.setGeometry(100, 520, 300, 15) self.pa = self.Qf.palette() role = self.Qf.backgroundRole() self.pa.setColor(role, QColor(255, 255, 255)) self.Qf.setPalette(self.pa) self.Qf.setAutoFillBackground(True) self.Qs.valueChanged.connect(self.paint) self.show() def paint(self): R = [] G = [] B = [] for i in range(0, 100): R.append(random.randrange(0, 256)) G.append(random.randrange(0, 256)) B.append(random.randrange(0, 256)) rang = [] jam = [] slideval = self.Qs.value() for b in range(0, 100): rang = [R[b], G[b], B[b]] jam.append(rang) print(jam) self.palette = self.Qf.palette() r = self.Qf.backgroundRole() if slideval == 0: self.x = 255 self.y = 255 self.z = 250 self.palette.setColor(r, QColor(self.x, self.y, self.z)) self.Qf.setPalette(self.palette) self.Qf.setAutoFillBackground(True) elif slideval == 99: self.x = 0 self.y = 0 self.z = 0 self.palette.setColor(r, QColor(self.x, self.y, self.z)) self.Qf.setPalette(self.palette) self.Qf.setAutoFillBackground(True) else: self.x, self.y, self.z = jam[slideval] self.palette.setColor(r, QColor(self.x, self.y, self.z)) self.Qf.setPalette(self.palette) self.Qf.setAutoFillBackground(True)