Formulator / qt /components /__init__.py
ango
04.09 commit
f0b1638
raw
history blame
4.86 kB
from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QAbstractItemView, QTableWidgetItem, \
QHeaderView, QSizePolicy
from PySide6.QtWidgets import QComboBox, QRadioButton, QTextBrowser, QTextEdit, QSpinBox, QListWidget, QTableWidget
from PySide6.QtCore import Qt
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)
self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
layout.addWidget(self.label)
layout.addWidget(self.table)
layout.addStretch()
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))
self.table.resizeColumnsToContents()
class ListWithLabel(LabelWidget):
def __init__(self, label, items: list = None):
super().__init__(label)
layout = QVBoxLayout()
self.setLayout(layout)
self.list = QListWidget()
self.list.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)
if items:
self.list.addItems(items)
layout.addWidget(self.label)
layout.addWidget(self.list)
layout.addStretch()
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()
if items:
self.combo_box.addItems(items)
if index:
self.combo_box.setCurrentIndex(index)
layout.addWidget(self.label)
layout.addWidget(self.combo_box)
layout.addStretch()
def set_items(self, items):
self.combo_box.blockSignals(True)
self.combo_box.clear()
self.combo_box.addItems(items)
self.combo_box.blockSignals(False)
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(10e8)
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, stretch: bool = True, editable: bool = False):
super().__init__(label)
layout = QVBoxLayout(self)
if editable:
self.text_browser = QTextEdit()
else:
self.text_browser = QTextBrowser()
layout.addWidget(self.label)
layout.addWidget(self.text_browser)
if stretch:
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()