faculty_project/PlotterDialog/PlotterDialog.py

144 lines
4.4 KiB
Python

from PyQt5.QtWidgets import *
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.layout.addWidget(label)
for button_name in full_names:
button = QPushButton(button_name, self)
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_())