From 3bb99f44061d0037f56c6899eba8bac0825fff4b Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Sun, 5 Feb 2023 15:29:31 +0100 Subject: [PATCH] basics are working --- src/gui_qt/_py/guidelinewidget.py | 50 ++++----- src/gui_qt/_py/rectanglewidget.py | 39 ++++--- src/gui_qt/graphs/draw_inputs.py | 82 +++++++++------ src/gui_qt/graphs/draw_objects.py | 146 +++++++++++++++++++++++---- src/gui_qt/graphs/drawings.py | 20 ++-- src/gui_qt/linedrawwidget.py | 54 ---------- src/resources/_ui/guidelinewidget.ui | 12 +-- src/resources/_ui/rectanglewidget.ui | 96 ++++++++++-------- 8 files changed, 295 insertions(+), 204 deletions(-) delete mode 100644 src/gui_qt/linedrawwidget.py diff --git a/src/gui_qt/_py/guidelinewidget.py b/src/gui_qt/_py/guidelinewidget.py index 2ca5059..808ffa8 100644 --- a/src/gui_qt/_py/guidelinewidget.py +++ b/src/gui_qt/_py/guidelinewidget.py @@ -18,21 +18,21 @@ class Ui_Form(object): self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form) self.verticalLayout_2.setContentsMargins(3, 3, 3, 3) self.verticalLayout_2.setObjectName("verticalLayout_2") - self.treeWidget_2 = QtWidgets.QTreeWidget(Form) - self.treeWidget_2.setRootIsDecorated(True) - self.treeWidget_2.setObjectName("treeWidget_2") - self.treeWidget_2.headerItem().setText(0, "1") - self.treeWidget_2.header().setVisible(False) - self.treeWidget_2.header().setHighlightSections(True) - self.verticalLayout_2.addWidget(self.treeWidget_2) + self.treeWidget = QtWidgets.QTreeWidget(Form) + self.treeWidget.setRootIsDecorated(True) + self.treeWidget.setObjectName("treeWidget") + self.treeWidget.headerItem().setText(0, "1") + self.treeWidget.header().setVisible(False) + self.treeWidget.header().setHighlightSections(True) + self.verticalLayout_2.addWidget(self.treeWidget) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") - self.pushButton = QtWidgets.QPushButton(Form) - self.pushButton.setObjectName("pushButton") - self.horizontalLayout.addWidget(self.pushButton) - self.pushButton_2 = QtWidgets.QPushButton(Form) - self.pushButton_2.setObjectName("pushButton_2") - self.horizontalLayout.addWidget(self.pushButton_2) + self.newButton = QtWidgets.QPushButton(Form) + self.newButton.setObjectName("newButton") + self.horizontalLayout.addWidget(self.newButton) + self.editButton = QtWidgets.QPushButton(Form) + self.editButton.setObjectName("editButton") + self.horizontalLayout.addWidget(self.editButton) self.verticalLayout_2.addLayout(self.horizontalLayout) self.frame = QtWidgets.QFrame(Form) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) @@ -41,14 +41,14 @@ class Ui_Form(object): self.formLayout = QtWidgets.QFormLayout(self.frame) self.formLayout.setContentsMargins(-1, -1, -1, 6) self.formLayout.setObjectName("formLayout") - self.label_12 = QtWidgets.QLabel(self.frame) + self.type_label = QtWidgets.QLabel(self.frame) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.label_12.sizePolicy().hasHeightForWidth()) - self.label_12.setSizePolicy(sizePolicy) - self.label_12.setObjectName("label_12") - self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_12) + sizePolicy.setHeightForWidth(self.type_label.sizePolicy().hasHeightForWidth()) + self.type_label.setSizePolicy(sizePolicy) + self.type_label.setObjectName("type_label") + self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.type_label) self.mode_comboBox = QtWidgets.QComboBox(self.frame) self.mode_comboBox.setObjectName("mode_comboBox") self.mode_comboBox.addItem("") @@ -61,9 +61,9 @@ class Ui_Form(object): self.stackedWidget.setFrameShape(QtWidgets.QFrame.NoFrame) self.stackedWidget.setObjectName("stackedWidget") self.formLayout.setWidget(1, QtWidgets.QFormLayout.SpanningRole, self.stackedWidget) - self.pushButton_3 = QtWidgets.QPushButton(self.frame) - self.pushButton_3.setObjectName("pushButton_3") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButton_3) + self.createButton = QtWidgets.QPushButton(self.frame) + self.createButton.setObjectName("createButton") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.createButton) self.verticalLayout_2.addWidget(self.frame) self.retranslateUi(Form) @@ -73,12 +73,12 @@ class Ui_Form(object): def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) - self.pushButton.setText(_translate("Form", "New object")) - self.pushButton_2.setText(_translate("Form", "Edit")) - self.label_12.setText(_translate("Form", "Type")) + self.newButton.setText(_translate("Form", "New object")) + self.editButton.setText(_translate("Form", "Edit")) + self.type_label.setText(_translate("Form", "Type")) self.mode_comboBox.setItemText(0, _translate("Form", "Infinite Line")) self.mode_comboBox.setItemText(1, _translate("Form", "Multiple points")) self.mode_comboBox.setItemText(2, _translate("Form", "Text")) self.mode_comboBox.setItemText(3, _translate("Form", "Rectangle")) self.mode_comboBox.setItemText(4, _translate("Form", "Ellipse")) - self.pushButton_3.setText(_translate("Form", "Create")) + self.createButton.setText(_translate("Form", "Apply")) diff --git a/src/gui_qt/_py/rectanglewidget.py b/src/gui_qt/_py/rectanglewidget.py index e0ee4a8..39bd9d3 100644 --- a/src/gui_qt/_py/rectanglewidget.py +++ b/src/gui_qt/_py/rectanglewidget.py @@ -17,32 +17,38 @@ class Ui_rectanglewidget(object): rectanglewidget.resize(400, 300) self.gridLayout = QtWidgets.QGridLayout(rectanglewidget) self.gridLayout.setObjectName("gridLayout") - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout.addItem(spacerItem, 3, 0, 1, 1) self.color_label = QtWidgets.QLabel(rectanglewidget) self.color_label.setObjectName("color_label") self.gridLayout.addWidget(self.color_label, 0, 0, 1, 1) self.left_x = QtWidgets.QLineEdit(rectanglewidget) self.left_x.setObjectName("left_x") - self.gridLayout.addWidget(self.left_x, 1, 1, 1, 1) + self.gridLayout.addWidget(self.left_x, 2, 1, 1, 1) self.left_y = QtWidgets.QLineEdit(rectanglewidget) self.left_y.setObjectName("left_y") - self.gridLayout.addWidget(self.left_y, 1, 2, 1, 1) - self.left_label = QtWidgets.QLabel(rectanglewidget) - self.left_label.setObjectName("left_label") - self.gridLayout.addWidget(self.left_label, 1, 0, 1, 1) + self.gridLayout.addWidget(self.left_y, 2, 2, 1, 1) + self.right_x = QtWidgets.QLineEdit(rectanglewidget) + self.right_x.setObjectName("right_x") + self.gridLayout.addWidget(self.right_x, 3, 1, 1, 1) self.color_box = ColorListEditor(rectanglewidget) self.color_box.setObjectName("color_box") self.gridLayout.addWidget(self.color_box, 0, 1, 1, 2) - self.right_label = QtWidgets.QLabel(rectanglewidget) - self.right_label.setObjectName("right_label") - self.gridLayout.addWidget(self.right_label, 2, 0, 1, 1) - self.right_x = QtWidgets.QLineEdit(rectanglewidget) - self.right_x.setObjectName("right_x") - self.gridLayout.addWidget(self.right_x, 2, 1, 1, 1) + self.left_label = QtWidgets.QLabel(rectanglewidget) + self.left_label.setObjectName("left_label") + self.gridLayout.addWidget(self.left_label, 2, 0, 1, 1) self.right_y = QtWidgets.QLineEdit(rectanglewidget) self.right_y.setObjectName("right_y") - self.gridLayout.addWidget(self.right_y, 2, 2, 1, 1) + self.gridLayout.addWidget(self.right_y, 3, 2, 1, 1) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.gridLayout.addItem(spacerItem, 4, 0, 1, 1) + self.right_label = QtWidgets.QLabel(rectanglewidget) + self.right_label.setObjectName("right_label") + self.gridLayout.addWidget(self.right_label, 3, 0, 1, 1) + self.fill_label = QtWidgets.QLabel(rectanglewidget) + self.fill_label.setObjectName("fill_label") + self.gridLayout.addWidget(self.fill_label, 1, 0, 1, 1) + self.fill_box = ColorListEditor(rectanglewidget) + self.fill_box.setObjectName("fill_box") + self.gridLayout.addWidget(self.fill_box, 1, 1, 1, 2) self.retranslateUi(rectanglewidget) QtCore.QMetaObject.connectSlotsByName(rectanglewidget) @@ -53,8 +59,9 @@ class Ui_rectanglewidget(object): self.color_label.setText(_translate("rectanglewidget", "Color")) self.left_x.setPlaceholderText(_translate("rectanglewidget", "x")) self.left_y.setPlaceholderText(_translate("rectanglewidget", "y")) - self.left_label.setText(_translate("rectanglewidget", "Lower left")) - self.right_label.setText(_translate("rectanglewidget", "Upper right")) self.right_x.setPlaceholderText(_translate("rectanglewidget", "x")) + self.left_label.setText(_translate("rectanglewidget", "Lower left")) self.right_y.setPlaceholderText(_translate("rectanglewidget", "y")) + self.right_label.setText(_translate("rectanglewidget", "Upper right")) + self.fill_label.setText(_translate("rectanglewidget", "Fill color")) from gui_qt.lib.delegates import ColorListEditor diff --git a/src/gui_qt/graphs/draw_inputs.py b/src/gui_qt/graphs/draw_inputs.py index 9cff13d..faa122d 100644 --- a/src/gui_qt/graphs/draw_inputs.py +++ b/src/gui_qt/graphs/draw_inputs.py @@ -35,7 +35,7 @@ class LineWidget(QtWidgets.QWidget, Ui_linewidget): self.pos_lineedit.setValidator(QtGui.QDoubleValidator()) - def collect_args(self): + def collect_args(self) -> dict | None: pos = self.pos_lineedit.text() try: pos = float(pos) @@ -56,7 +56,11 @@ class MultiPointWidget(QtWidgets.QWidget, Ui_multipointwidget): super().__init__(parent=parent) self.setupUi(self) - def new_point(self, _): + self.new_point() + self.new_point() + + @QtCore.pyqtSlot(name='on_addButton_clicked') + def new_point(self): row = self.table_widget.rowCount() self.table_widget.setRowCount(row+1) placeholder = ['x', 'y'] @@ -68,28 +72,30 @@ class MultiPointWidget(QtWidgets.QWidget, Ui_multipointwidget): self.table_widget.setCellWidget(row, column, line_edit) - def less_point(self, _): - self.table_widget.removeRow(self.table_widget.rowCount()-1) + @QtCore.pyqtSlot(name='on_removeButton_clicked') + def less_point(self): + if self.table_widget.rowCount() > 2: + self.table_widget.removeRow(self.table_widget.rowCount()-1) - def collect_args(self): - dic = super().collect_args() + def collect_args(self) -> dict | None: pts = [] - if self.table_widget.rowCount() <= 1: + if self.table_widget.rowCount() < 2: return for row in range(self.table_widget.rowCount()): - next_pt = self.parse_point(self.table_widget.cellWidget(row, 0), self.table_widget.cellWidget(row, 1)) + next_pt = parse_point(self.table_widget.cellWidget(row, 0), self.table_widget.cellWidget(row, 1)) if next_pt is None: return pts.append(next_pt) - if pts: - dic['pts'] = pts - dic['closed'] = self.loop_checkbox.isChecked() - return dic - else: - return + dic = { + 'color': self.color_box.currentData(QtCore.Qt.UserRole), + 'pts': pts, + 'closed': self.loop_checkbox.isChecked(), + } + + return dic class RectangleWidget(QtWidgets.QWidget, Ui_rectanglewidget): @@ -97,22 +103,29 @@ class RectangleWidget(QtWidgets.QWidget, Ui_rectanglewidget): super().__init__(parent=parent) self.setupUi(self) + self.fill_box.insertItem(0, 'No fill', None) + self.fill_box.setCurrentIndex(0) + self.left_x.setValidator(QtGui.QDoubleValidator()) self.left_y.setValidator(QtGui.QDoubleValidator()) self.right_x.setValidator(QtGui.QDoubleValidator()) self.right_y.setValidator(QtGui.QDoubleValidator()) - def collect_args(self): - dic = super().collect_args() - left = self.parse_point(self.left_x, self.left_y) + def collect_args(self) -> dict | None: + left = parse_point(self.left_x, self.left_y) if left is None: return - dic['left'] = left - right = self.parse_point(self.right_x, self.right_y) + right = parse_point(self.right_x, self.right_y) if right is None: return - dic['right'] = right + + dic = { + 'color': self.color_box.currentData(QtCore.Qt.UserRole), + 'fill': self.fill_box.currentData(QtCore.Qt.UserRole), + 'left': left, + 'right': right, + } return dic @@ -127,17 +140,19 @@ class EllipseWidget(QtWidgets.QWidget, Ui_ellipsewidget): self.width_line.setValidator(QtGui.QDoubleValidator()) self.height_line.setValidator(QtGui.QDoubleValidator()) - def collect_args(self): - dic = super().collect_args() - centre = self.parse_point(self.center_x, self.center_y) + def collect_args(self) -> dict | None: + centre = parse_point(self.center_x, self.center_y) if centre is None: return - dic['centre'] = centre - - axes = self.parse_point(self.width_line, self.height_line) + axes = parse_point(self.width_line, self.height_line) if axes is None: return - dic['axes'] = axes + + dic = { + 'color': self.color_box.currentData(QtCore.Qt.UserRole), + 'center': centre, + 'axes': axes, + } return dic @@ -150,13 +165,16 @@ class TextWidget(QtWidgets.QWidget, Ui_textwidget): self.center_x.setValidator(QtGui.QDoubleValidator()) self.center_y.setValidator(QtGui.QDoubleValidator()) - def collect_args(self): - dic = super().collect_args() - centre = self.parse_point(self.center_x, self.center_y) + def collect_args(self) -> dict | None: + + centre = parse_point(self.center_x, self.center_y) if centre is None: return - dic['centre'] = centre - dic['text'] = self.text_lineedit.text() + dic = { + 'color': self.color_box.currentData(QtCore.Qt.UserRole), + 'pos': centre, + 'text': self.text_lineedit.text(), + } return dic diff --git a/src/gui_qt/graphs/draw_objects.py b/src/gui_qt/graphs/draw_objects.py index bf8b0eb..2d18ee4 100644 --- a/src/gui_qt/graphs/draw_objects.py +++ b/src/gui_qt/graphs/draw_objects.py @@ -2,14 +2,14 @@ from __future__ import annotations import uuid -from pyqtgraph import mkPen, GraphicsObject, mkBrush +from pyqtgraph import TextItem, mkPen, GraphicsObject, mkBrush from numpy import log10 from gui_qt.Qt import QtCore, QtGui from gui_qt.lib.pg_objects import LogInfiniteLine, PlotItem -__all__ = ['LineObject', 'MultipointObject', 'RectangleObject'] +__all__ = ['LineObject', 'MultipointObject', 'RectangleObject', 'TextObject', 'EllipseObject'] class BaseObject: @@ -54,19 +54,23 @@ class MultipointObject(BaseObject): return f'{len(self._y)-int(self.closed)}-pts' -class RectangleObject(GraphicsObject, BaseObject): - def __init__(self, left: tuple, right: tuple, **kwargs): +class Rectangle(GraphicsObject): + # adapted from pyqtgraph example on custom objects + + def __init__(self, left: tuple, right: tuple): GraphicsObject.__init__(self) - BaseObject.__init__(self, **kwargs) self.p0 = left self.delta = [right[0]-self.p0[0], right[1]-self.p0[1]] + + self.x_disp = self.p0[0] + self.dx = self.delta[0] + self.y_disp = self.p0[1] + self.dy = self.delta[1] + self.log_mode = [False, False] self.generatePicture() - def __str__(self): - return 'rectangle' - def generatePicture(self): ## pre-computing a QPicture object allows paint() to run much more quickly, ## rather than re-drawing the shapes every time. @@ -74,10 +78,10 @@ class RectangleObject(GraphicsObject, BaseObject): p = QtGui.QPainter(self.picture) p.setPen(mkPen('w')) p.setBrush(mkBrush('r')) - p.drawRect(QtCore.QRectF(*self.p0, *self.delta)) + p.drawRect(QtCore.QRectF(self.x_disp, self.y_disp, self.dx, self.dy)) p.end() - def paint(self, p, _): + def paint(self, p, *_): p.drawPicture(0, 0, self.picture) def boundingRect(self): @@ -92,19 +96,127 @@ class RectangleObject(GraphicsObject, BaseObject): if self.log_mode[0] != x_mode: if x_mode: - xmax = log10(self.p0[0]+self.delta[0]) - self.x_disp = log10(self.p0[0]) - self.dx = xmax - self.x0 + x0 = self.p0[0] + xmax = log10(x0+self.delta[0]) + self.x_disp = log10(x0) + self.dx = xmax - self.x_disp else: self.x_disp = self.p0[0] self.dx = self.delta[0] - if args[1] and self.log_mode[1] != args[1]: - ymax = log10(self.y0 + self.dy) - self.y0 = log10(self.y0) - self.dy = ymax - self.y0 + + if self.log_mode[1] != y_mode: + if y_mode: + y0 = self.p0[1] + ymax = log10(y0 + self.delta[1]) + self.y_disp = log10(y0) + self.dy = ymax - self.y_disp + else: + self.y_disp = self.p0[1] + self.dy = self.delta[1] self.generatePicture() self.log_mode = [x_mode, y_mode] self.informViewBoundsChanged() + +class RectangleObject(BaseObject): + def __init__(self, left: tuple, right: tuple, **kwargs): + super().__init__(**kwargs) + + self.left = left + self.right = right + + self.drawing = Rectangle(left, right) + + def __str__(self): + return f'Rectangle {self.left} to {self.right}' + + +class TextObject(BaseObject): + def __init__(self, text, pos, **kwargs): + super().__init__(**kwargs) + + self.pos = pos + self.drawing = TextItem(text, anchor=(0.5, 0.5), color=self.color.rgb()) + self.drawing.setPos(*pos) + + def __str__(self): + return f'{self.drawing.toPlainText()} at {self.pos}' + + +class EllipseObject(BaseObject): + def __init__(self, center: tuple, axes: tuple, **kwargs): + super().__init__(**kwargs) + + self.center = center + self.axes = axes + + self.drawing = Ellipse(center, axes) + + def __str__(self): + return f'Ellipse at {self.center}' + +class Ellipse(GraphicsObject): + # adapted from pyqtgraph example on custom objects + + def __init__(self, center: tuple, axes: tuple): + GraphicsObject.__init__(self) + + self.center = center + self.ax = axes + + self.center_disp = self.center + self.ax_disp = self.ax + + self.log_mode = [False, False] + self.generatePicture() + + def generatePicture(self): + ## pre-computing a QPicture object allows paint() to run much more quickly, + ## rather than re-drawing the shapes every time. + self.picture = QtGui.QPicture() + p = QtGui.QPainter(self.picture) + p.setPen(mkPen('w')) + p.setBrush(mkBrush('r')) + p.drawEllipse(QtCore.QPointF(*self.center_disp), *self.ax_disp) + p.end() + + def paint(self, p, *_): + p.drawPicture(0, 0, self.picture) + + def boundingRect(self): + ## boundingRect _must_ indicate the entire area that will be drawn on + ## or else we will get artifacts and possibly crashing. + ## (in this case, QPicture does all the work of computing the bouning rect for us) + return QtCore.QRectF(self.picture.boundingRect()) + + def setLogMode(self, x_mode, y_mode): + if self.log_mode == [x_mode, y_mode]: + return + + if self.log_mode[0] != x_mode: + if x_mode: + x0 = self.p0[0] + xmax = log10(x0+self.delta[0]) + self.x_disp = log10(x0) + self.dx = xmax - self.x_disp + else: + self.x_disp = self.p0[0] + self.dx = self.delta[0] + + if self.log_mode[1] != y_mode: + if y_mode: + y0 = self.p0[1] + ymax = log10(y0 + self.delta[1]) + self.y_disp = log10(y0) + self.dy = ymax - self.y_disp + else: + self.y_disp = self.p0[1] + self.dy = self.delta[1] + + self.generatePicture() + + self.log_mode = [x_mode, y_mode] + + self.informViewBoundsChanged() \ No newline at end of file diff --git a/src/gui_qt/graphs/drawings.py b/src/gui_qt/graphs/drawings.py index b9219c2..0dde5c6 100644 --- a/src/gui_qt/graphs/drawings.py +++ b/src/gui_qt/graphs/drawings.py @@ -28,7 +28,7 @@ class DrawingsWidget(QtWidgets.QWidget, Ui_Form): child = QtWidgets.QTreeWidgetItem([d]) item.addChild(child) - self.treeWidget_2.addTopLevelItem(item) + self.treeWidget.addTopLevelItem(item) # self.graph_comboBox.addItem(name, userData=gid) def clear(self): @@ -38,29 +38,27 @@ class DrawingsWidget(QtWidgets.QWidget, Ui_Form): def change_draw_type(self, idx: int): self.stackedWidget.setCurrentIndex(idx) - @QtCore.pyqtSlot(name='on_pushButton_3_clicked') + @QtCore.pyqtSlot(name='on_createButton_clicked') def make_drawing(self): dic = self.stackedWidget.currentWidget().collect_args() if dic is None: QtWidgets.QMessageBox.information(self, 'Not working', 'Something is missing to create this object') return - idx = self.treeWidget_2.selectedIndexes() + idx = self.treeWidget.selectedIndexes() if idx: - item = self.treeWidget_2.itemFromIndex(idx[0]) + idx = idx[0] + new_obj = [LineObject, MultipointObject, TextObject, RectangleObject, EllipseObject][self.mode_comboBox.currentIndex()](**dic) + item = self.treeWidget.itemFromIndex(idx) graph_id = item.data(0, QtCore.Qt.UserRole) - if self.mode_comboBox.currentIndex() == 0: - new_obj = LineObject(**dic) - elif self.mode_comboBox.currentIndex() == 1: - new_obj = MultipointObject(**dic) - elif self.mode_comboBox.currentIndex() == 3: - new_obj = RectangleObject(**dic) + child = QtWidgets.QTreeWidgetItem([str(new_obj)]) child.setData(0, QtCore.Qt.UserRole, new_obj.id) + item.addChild(child) self.graphs[graph_id].addDrawing(new_obj) else: QtWidgets.QMessageBox.information(self, 'Not working', 'No graph is selected to add this object.') - self.treeWidget_2.expandAll() + self.treeWidget.expandAll() diff --git a/src/gui_qt/linedrawwidget.py b/src/gui_qt/linedrawwidget.py deleted file mode 100644 index 4a0fcc8..0000000 --- a/src/gui_qt/linedrawwidget.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'src/resources/_ui/linedrawwidget.ui' -# -# Created by: PyQt5 UI code generator 5.15.7 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets - - -class Ui_linewidget(object): - def setupUi(self, linewidget): - linewidget.setObjectName("linewidget") - linewidget.resize(400, 300) - self.gridLayout = QtWidgets.QGridLayout(linewidget) - self.gridLayout.setObjectName("gridLayout") - self.pos_lineedit = QtWidgets.QLineEdit(linewidget) - self.pos_lineedit.setObjectName("pos_lineedit") - self.gridLayout.addWidget(self.pos_lineedit, 1, 1, 1, 1) - self.orientation_label = QtWidgets.QLabel(linewidget) - self.orientation_label.setObjectName("orientation_label") - self.gridLayout.addWidget(self.orientation_label, 2, 0, 1, 1) - self.orient_combobox = QtWidgets.QComboBox(linewidget) - self.orient_combobox.setObjectName("orient_combobox") - self.orient_combobox.addItem("") - self.orient_combobox.addItem("") - self.gridLayout.addWidget(self.orient_combobox, 2, 1, 1, 1) - self.color_label = QtWidgets.QLabel(linewidget) - self.color_label.setObjectName("color_label") - self.gridLayout.addWidget(self.color_label, 0, 0, 1, 1) - self.pos_label = QtWidgets.QLabel(linewidget) - self.pos_label.setObjectName("pos_label") - self.gridLayout.addWidget(self.pos_label, 1, 0, 1, 1) - self.color_box = ColorListEditor(linewidget) - self.color_box.setObjectName("color_box") - self.gridLayout.addWidget(self.color_box, 0, 1, 1, 1) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout.addItem(spacerItem, 3, 1, 1, 1) - - self.retranslateUi(linewidget) - QtCore.QMetaObject.connectSlotsByName(linewidget) - - def retranslateUi(self, linewidget): - _translate = QtCore.QCoreApplication.translate - linewidget.setWindowTitle(_translate("linewidget", "Form")) - self.orientation_label.setText(_translate("linewidget", "Orientation")) - self.orient_combobox.setItemText(0, _translate("linewidget", "Horizontal")) - self.orient_combobox.setItemText(1, _translate("linewidget", "Vertical")) - self.color_label.setText(_translate("linewidget", "Color")) - self.pos_label.setText(_translate("linewidget", "Position")) -from gui_qt.lib,delegates import ColorListEditor diff --git a/src/resources/_ui/guidelinewidget.ui b/src/resources/_ui/guidelinewidget.ui index 5ac0b4d..ab2a49f 100644 --- a/src/resources/_ui/guidelinewidget.ui +++ b/src/resources/_ui/guidelinewidget.ui @@ -27,7 +27,7 @@ 3 - + true @@ -47,14 +47,14 @@ - + New object - + Edit @@ -75,7 +75,7 @@ 6 - + 0 @@ -127,9 +127,9 @@ - + - Create + Apply diff --git a/src/resources/_ui/rectanglewidget.ui b/src/resources/_ui/rectanglewidget.ui index 0b78a65..3b769cf 100644 --- a/src/resources/_ui/rectanglewidget.ui +++ b/src/resources/_ui/rectanglewidget.ui @@ -14,7 +14,52 @@ Form - + + + + Color + + + + + + + x + + + + + + + y + + + + + + + x + + + + + + + + + + Lower left + + + + + + + y + + + + Qt::Vertical @@ -27,57 +72,22 @@ - - - - Color - - - - - - - x - - - - - - - y - - - - - - - Lower left - - - - - - - + Upper right - - - - x + + + + Fill color - - - - y - - + +