Formulator / qt /components /__init__.py
ango
04.24 commit
36e359a
raw
history blame
6.1 kB
from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel
from PySide6.QtWidgets import QAbstractItemView, QTableWidgetItem, QHeaderView, QListView
from PySide6.QtWidgets import QComboBox, QRadioButton, QLineEdit, QSpinBox, QDoubleSpinBox, QListWidget, QTableWidget
class LabelWidget(QWidget):
def __init__(self, label, info: str = ""):
super().__init__()
if info:
self.label = QLabel(f"{label} - {info}")
else:
self.label = QLabel(label)
def set_label(self, label):
self.label.setText(label)
class TableWithLabel(LabelWidget):
def __init__(self, label, row_count: int = 0, column_count: int = 0, headers: list = None):
super().__init__(label)
layout = QVBoxLayout()
self.setLayout(layout)
self.table = QTableWidget()
if row_count:
self.table.setRowCount(row_count)
if column_count:
self.table.setColumnCount(column_count)
if headers:
self.table.setColumnCount(len(headers))
self.table.setHorizontalHeaderLabels(headers)
else:
self.table.horizontalHeader().setVisible(False)
self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
self.table.verticalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
self.table.verticalHeader().setVisible(False)
layout.addWidget(self.label)
layout.addWidget(self.table)
def set_content(self, content):
self.table.setRowCount(len(content))
for i, row in enumerate(content):
for j, e in enumerate(row):
self.table.setItem(i, j, QTableWidgetItem(e))
class ListWithLabel(LabelWidget):
def __init__(self, label, max_select: int = 4, items: list = None):
super().__init__(label)
layout = QVBoxLayout(self)
self.max_select = max_select
self.list = QListWidget()
self.list.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)
self.list.setResizeMode(QListView.ResizeMode.Adjust)
if items:
self.set_items(items)
layout.addWidget(self.label)
layout.addWidget(self.list)
def set_items(self, items):
self.list.clear()
self.list.addItems(items)
class ComboWithLabel(LabelWidget):
def __init__(self, label, info: str = "", items: list = None, index=None):
super().__init__(label, info)
layout = QVBoxLayout()
self.setLayout(layout)
self.combo_box = QComboBox()
self.items = []
if items:
self.set_items(items)
if index:
self.combo_box.setCurrentIndex(index)
layout.addWidget(self.label)
layout.addWidget(self.combo_box)
layout.addStretch()
def set_items(self, items, keep_index=False, default_index=0):
self.items = items
self.combo_box.blockSignals(True)
current_text = self.combo_box.currentText()
self.combo_box.clear()
self.combo_box.addItems(items)
self.combo_box.blockSignals(False)
if keep_index and current_text and current_text in items:
self.combo_box.setCurrentIndex(items.index(current_text))
else:
self.combo_box.setCurrentIndex(default_index)
class RadioWithLabel(LabelWidget):
def __init__(self, label, text: str = None):
super().__init__(label)
layout = QVBoxLayout()
self.setLayout(layout)
self.radio_button = QRadioButton()
if text:
self.radio_button.setText(text)
layout.addWidget(self.label)
layout.addWidget(self.radio_button)
layout.addStretch()
def set_text(self, text):
self.radio_button.setText(text)
class SpinWithLabel(LabelWidget):
def __init__(self, label, info="", minimum=None, maximum=None, value=None):
super().__init__(label, info)
layout = QVBoxLayout()
self.setLayout(layout)
self.spin_box = QSpinBox()
if minimum:
self.spin_box.setMinimum(minimum)
if maximum:
self.spin_box.setMaximum(maximum + 1)
else:
self.spin_box.setMaximum(10 ** 8)
if value:
self.spin_box.setValue(value)
layout.addWidget(self.label)
layout.addWidget(self.spin_box)
layout.addStretch()
def set_value(self, value):
self.spin_box.setValue(value)
class DoubleSpinWithLabel(LabelWidget):
def __init__(self, label, info="", minimum=None, maximum=None, value=None):
super().__init__(label, info)
layout = QVBoxLayout()
self.setLayout(layout)
self.spin_box = QDoubleSpinBox()
if minimum:
self.spin_box.setMinimum(minimum)
if maximum:
self.spin_box.setMaximum(maximum + 1)
else:
self.spin_box.setMaximum(10 ** 8)
if value:
self.spin_box.setValue(value)
layout.addWidget(self.label)
layout.addWidget(self.spin_box)
layout.addStretch()
def set_value(self, value):
self.spin_box.setValue(value)
class TextWithLabel(LabelWidget):
def __init__(self, label):
super().__init__(label)
layout = QVBoxLayout(self)
self.text_browser = QLineEdit()
layout.addWidget(self.label)
layout.addWidget(self.text_browser)
layout.addStretch()
def set_text(self, text):
self.text_browser.setText(text)
class LabelWithLabel(QWidget):
def __init__(self, label):
super().__init__()
layout = QHBoxLayout()
self.setLayout(layout)
self.label = QLabel(label)
self.text = QLabel()
# self.text_browser.textChanged.connect(self.resize_height)
layout.addWidget(self.label)
layout.addWidget(self.text)
layout.addStretch()
def set_text(self, text):
self.text.setText(text)