Работающая qtшка, сделанная под руководством Димы

This commit is contained in:
vova 2023-10-18 21:02:21 +03:00
parent dba43e3748
commit f1ab7c2750
3 changed files with 139 additions and 112 deletions

View File

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 340 B

View File

@ -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):
...
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_())

View File

@ -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_())