diff --git a/QдизайнT/345678iop.png b/PlotterDialog/345678iop.png similarity index 100% rename from QдизайнT/345678iop.png rename to PlotterDialog/345678iop.png diff --git a/PlotterDialog/PlotterDialog.py b/PlotterDialog/PlotterDialog.py index 7f90fc2..1947497 100644 --- a/PlotterDialog/PlotterDialog.py +++ b/PlotterDialog/PlotterDialog.py @@ -1,10 +1,143 @@ -from PyQt5.QtWidgets import QDialog +from PyQt5.QtWidgets import * -class PlotterDIalog(QDialog): - def __init__(self): + +class GraphRequester(QWidget): + def __init__(self, nomer_grafika=1): + QWidget.__init__(self) + layout = QVBoxLayout(self) + layout_x = QHBoxLayout() + layout_y = QHBoxLayout() + layout_close_and_name = QHBoxLayout() + self.LineEditGraf = QLineEdit(f"график {nomer_grafika}") + NameX = QLabel("X") + NameY = QLabel("Y") + Name_Close = QPushButton("Закрыть") + + self.LineEditX = QLineEdit() + self.LineEditY = QLineEdit() + + layout_x.addWidget(NameX) + layout_x.addWidget(self.LineEditX) + + layout_y.addWidget(NameY) + layout_y.addWidget(self.LineEditY) + + Name_Close.clicked.connect(lambda: self.setParent(None)) + + layout_close_and_name.addWidget(self.LineEditGraf) + layout_close_and_name.addWidget(Name_Close) + + layout.addLayout(layout_close_and_name) # Вложения названия и закрыть + layout.addLayout(layout_x) # Вложение + layout.addLayout(layout_y) # Вложение + + +class ButtonGroup(QWidget): + def __init__(self, category: str, full_names={}, buttons_actions={}, parent=None): super().__init__() + self.layout = QVBoxLayout() # Создание основного лаяутв + Doplayout = QHBoxLayout() + label = QLabel(category) - self.initUI() + self.layout.addWidget(label) + for button_name in full_names: + button = QPushButton(button_name, self) - def initUI(self): - ... \ No newline at end of file + button.setFixedWidth(80) + button.setToolTip( + full_names[button_name] + ) # Создание подскачоки при наведении + + button.clicked.connect( + buttons_actions[button_name] + ) # Назначение кнопочке действия + + Doplayout.addWidget(button) # отрисовывание кнопок + + self.layout.addLayout(Doplayout) + self.setLayout(self.layout) + + +# ButtonGroup( +# name="Function", +# full_names={"a": "A", "b": "B", "c": "C"}, +# buttons_actions={ +# "a": lambda: print("A"), +# "b": lambda: print("B"), +# "c": lambda: None, +# }, +# ) + +# GraphRequester(close=lambda x: x) + + +class PlotDialog(QDialog): + def __init__( + self, + variable_full_names: dict[str, str], + function_full_names: dict[str, str], + # variable_values: dict[str, np.ndarray], + ): + super().__init__() + layout_boss = QVBoxLayout() # главный лояут + + scroll = QScrollArea() + scrollWidget = QWidget() + + self.inputs_layout = QVBoxLayout() # лаяут первой трети + self.num_of_input = 0 # инициализация первого графика + self.add_input() + # first_layout = add_input(num_of_input) # Установка начального окна ввода + + scrollWidget.setLayout(self.inputs_layout) + + scroll.setWidgetResizable(True) + scroll.setWidget(scrollWidget) + + layout_boss.addWidget(scroll) + + Button_make_fun_button = QPushButton("+") + Button_make_fun_button.clicked.connect(self.add_input) + Button_make_fun_button.setFixedWidth(80) + layout_boss.addWidget(Button_make_fun_button) + + layout_boss.addWidget( + ButtonGroup( + "Переменные", + full_names=variable_full_names, + buttons_actions={ + "a": lambda: print("A"), + "b": lambda: print("B"), + "c": lambda: None, + }, + ) + ) + layout_boss.addWidget( + ButtonGroup( + "Функции", + full_names=function_full_names, + buttons_actions={ + "exp": lambda: print("exp"), + "ln": lambda: print("ln"), + "mod": lambda: None, + }, + ) + ) + + self.setLayout(layout_boss) + + def add_input(self): + self.num_of_input += 1 + self.inputs_layout.addWidget(GraphRequester(self.num_of_input)) + + +if __name__ == "__main__": + import sys + + app = QApplication(sys.argv) + w = PlotDialog( + variable_full_names={"a": "A", "b": "B", "c": "C"}, + function_full_names={"exp": "экспонента", "ln": "Логарифм", "mod": "модуль"}, + ) + w.show() + sys.exit(app.exec_()) diff --git a/QдизайнT/PlotterDialog.py b/QдизайнT/PlotterDialog.py deleted file mode 100644 index dcced0d..0000000 --- a/QдизайнT/PlotterDialog.py +++ /dev/null @@ -1,106 +0,0 @@ -from PyQt5.QtWidgets import * -class Widget1(QWidget): - def __init__(self, parent=None): - QWidget.__init__(self, parent=parent) - layout = QFormLayout(self) - LineEditGraf = QLineEdit("график 1") - NameX=QGroupBox("X") - NameY = QGroupBox("Y") - LineEditX = QLineEdit() - LineEditY = QLineEdit() - layout.addWidget(LineEditGraf) - layout.addWidget(NameX) - layout.addWidget(LineEditX) - layout.addWidget(NameY) - layout.addWidget(LineEditY) -class Widget2(QWidget): - def __init__(self, parent=None): - QWidget.__init__(self, parent=parent) - - # Традиционная семья Лаяутов, где главный -- папа - layout = QVBoxLayout(self) # папа-лаяут - layout_funct = QHBoxLayout(self) # мама-лаяут - layout_variab = QHBoxLayout(self) # сестра-лаяут - - # Дети-лаяуты - layout_dop1 = QVBoxLayout(self) # умный детина - layout_dop2 = QVBoxLayout(self) # так и сяк - layout_dop3 = QVBoxLayout(self) # вовсе дурак - - - Namelabel_variab = QLabel('Переменные', self) # заголовок перед кнопками - layout.addWidget(Namelabel_variab) # Вложение в главный лаяут - - # Кнопки для выбора переменных - VariabelsButton_t = QPushButton('t', self) - VariabelsButton_p = QPushButton('p', self) - VariabelsButton_f = QPushButton('f', self) - - # Подключение кнопок - layout_variab.addWidget(VariabelsButton_t) - layout_variab.addWidget(VariabelsButton_p) - layout_variab.addWidget(VariabelsButton_f) - - layout.addLayout(layout_variab) # Вложение в главный лаяут - # Создание текстового заголовка - Namelabel_funct = QLabel('Тривиальные функции', self) - layout.addWidget(Namelabel_funct) # Вложение в главный лаяут - - # Создание кнопок - FunctonButton_exp = QPushButton('exp', self) - FunctonButton_ln = QPushButton('ln', self) - # Вложение кнопок по две в вертикальную коробку(лаяут) - layout_dop1.addWidget(FunctonButton_exp) - layout_dop1.addWidget(FunctonButton_ln) - # Создание кнопок - FunctonButton_abs = QPushButton('abs', self) - FunctonButton_sin = QPushButton('sin', self) - # Дети-лаяуты хранят по две кнопки, так красивее - layout_dop2.addWidget(FunctonButton_abs) - layout_dop2.addWidget(FunctonButton_sin) - # Создание кнопок - FunctonButton_cos = QPushButton('cos', self) - FunctonButton_tg = QPushButton('tg', self) - # Вложение кнопок - layout_dop3.addWidget(FunctonButton_cos) - layout_dop3.addWidget(FunctonButton_tg) - - # Вложение вертикальных лаяутов в горизонтальный - layout_funct.addLayout(layout_dop1) - layout_funct.addLayout(layout_dop2) - layout_funct.addLayout(layout_dop3) - - layout.addLayout(layout_funct) # Вложение в главный лаяут - -class stackedExample(QWidget): - def __init__(self, parent=None): - QWidget.__init__(self, parent=parent) - lay = QVBoxLayout(self) - self.Stack = QStackedWidget() - self.Stack.addWidget(Widget1()) - self.Stack.addWidget(Widget2()) - - btnNext = QPushButton("Next") - btnNext.clicked.connect(self.onNext) - btnPrevious = QPushButton("Previous") - btnPrevious.clicked.connect(self.onPrevious) - btnLayout = QHBoxLayout() - btnLayout.addWidget(btnPrevious) - btnLayout.addWidget(btnNext) - - lay.addWidget(self.Stack) - lay.addLayout(btnLayout) - - def onNext(self): - self.Stack.setCurrentIndex((self.Stack.currentIndex()+1) % 2) - - def onPrevious(self): - self.Stack.setCurrentIndex((self.Stack.currentIndex()-1) % 2) - - -if __name__ == '__main__': - import sys - app = QApplication(sys.argv) - w = stackedExample() - w.show() - sys.exit(app.exec_())