mirror of https://gitlab.com/pamhyr/pamhyr2
250 lines
6.3 KiB
Python
250 lines
6.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
|
|
from PyQt5.QtWidgets import (
|
|
QMainWindow, QApplication, QDesktopWidget,
|
|
QMdiArea, QMdiSubWindow, QDialog,
|
|
QPushButton, QLineEdit, QCheckBox,
|
|
QTimeEdit, QSpinBox, QTextEdit,
|
|
QRadioButton, QComboBox, QFileDialog,
|
|
QMessageBox,
|
|
)
|
|
from PyQt5.QtCore import (
|
|
QTime,
|
|
)
|
|
from PyQt5.uic import loadUi
|
|
|
|
class ASubWindow(QDialog):
|
|
def __init__(self, name="", ui="dummy", parent=None):
|
|
super(ASubWindow, self).__init__(parent=parent)
|
|
self.ui = loadUi(
|
|
os.path.join(os.path.dirname(__file__), "ui", f"{ui}.ui"),
|
|
self
|
|
)
|
|
self.name = name
|
|
self.parent = parent
|
|
self.parent.sub_win_add(name, self)
|
|
|
|
def closeEvent(self, event):
|
|
if not self.parent is None:
|
|
self.parent.sub_win_del(self.name)
|
|
|
|
# Commun use features
|
|
|
|
def find(self, qtype, name):
|
|
"""Find an ui component
|
|
|
|
Args:
|
|
qtype: Type of QT component
|
|
name: Name for component
|
|
|
|
Returns:
|
|
return the component
|
|
"""
|
|
return self.ui.findChild(qtype, name)
|
|
|
|
def set_line_edit_text(self, name:str, text:str):
|
|
"""Set text of line edit component
|
|
|
|
Args:
|
|
line_edit: The line edit component name
|
|
text: The text
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QLineEdit, name).setText(text)
|
|
|
|
def get_line_edit_text(self, name:str):
|
|
"""Get text of line edit component
|
|
|
|
Args:
|
|
line_edit: The line edit component name
|
|
|
|
Returns:
|
|
Text
|
|
"""
|
|
return self.find(QLineEdit, name).text()
|
|
|
|
def set_text_edit_text(self, name:str, text:str):
|
|
"""Set text of text edit component
|
|
|
|
Args:
|
|
text_edit: The text edit component name
|
|
text: The text
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QTextEdit, name).setText(text)
|
|
|
|
def get_text_edit_text(self, name:str):
|
|
"""Get text of text edit component
|
|
|
|
Args:
|
|
text_edit: The text edit component name
|
|
|
|
Returns:
|
|
Text
|
|
"""
|
|
return self.find(QTextEdit, name).toHtml()
|
|
|
|
def set_check_box(self, name:str, checked:bool):
|
|
"""Set status of checkbox component
|
|
|
|
Args:
|
|
name: The check box component name
|
|
checked: Bool
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QCheckBox, name).setChecked(checked)
|
|
|
|
def get_check_box(self, name:str):
|
|
"""Get status of checkbox component
|
|
|
|
Args:
|
|
name: The check box component name
|
|
|
|
Returns:
|
|
Status of checkbox (bool)
|
|
"""
|
|
return self.find(QCheckBox, name).isChecked()
|
|
|
|
|
|
def set_time_edit(self, name:str, time:str):
|
|
"""Set time of timeedit component
|
|
|
|
Args:
|
|
name: The timeedit component name
|
|
time: The new time in format "HH:mm:ss"
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
qtime = QTime.fromString(time)
|
|
self.find(QTimeEdit, name).setTime(qtime)
|
|
|
|
def get_time_edit(self, name:str):
|
|
"""Get time of timeedit component
|
|
|
|
Args:
|
|
name: The timeedit component name
|
|
|
|
Returns:
|
|
The time of timeedit in format "HH:mm:ss"
|
|
"""
|
|
return self.find(QTimeEdit, name).time().toString()
|
|
|
|
def set_spin_box(self, name:str, value:int):
|
|
"""Set value of spinbox component
|
|
|
|
Args:
|
|
name: The spinbox component name
|
|
value: The new value
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QSpinBox, name).setValue(value)
|
|
|
|
def get_spin_box(self, name:str):
|
|
"""Get time of spin box component
|
|
|
|
Args:
|
|
name: The spin box component
|
|
|
|
Returns:
|
|
The value of spin box
|
|
"""
|
|
return self.find(QSpinBox, name).value()
|
|
|
|
def set_radio_button(self, name:str, checked:bool):
|
|
"""Set value of spinbox component
|
|
|
|
Args:
|
|
name: The spinbox component name
|
|
value: The new value
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QRadioButton, name).setChecked(checked)
|
|
|
|
def get_radio_button(self, name:str):
|
|
"""Get status of radio button
|
|
|
|
Args:
|
|
name: The radio button component name
|
|
|
|
Returns:
|
|
The status of radio button
|
|
"""
|
|
return self.find(QRadioButton, name).isChecked()
|
|
|
|
def combobox_add_item(self, name:str, item:str):
|
|
"""Add item in combo box
|
|
|
|
Args:
|
|
name: The combo box component name
|
|
item: The item to add
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QComboBox, name).addItem(item)
|
|
|
|
def set_combobox_text(self, name:str, item:str):
|
|
"""Set current text of combo box
|
|
|
|
Args:
|
|
name: The combo box component name
|
|
item: The item to add
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
self.find(QComboBox, name).setCurrentText(item)
|
|
|
|
|
|
# Custom dialog
|
|
def file_dialog(self, select_file=True, callback=lambda x: None):
|
|
"""Open a new file dialog and send result to callback function
|
|
|
|
Args:
|
|
select_file: Select a file if True, else select a dir
|
|
callback: The callback function
|
|
|
|
Returns:
|
|
Nothing
|
|
"""
|
|
dialog = QFileDialog(self)
|
|
|
|
if select_file:
|
|
mode = QFileDialog.FileMode.ExistingFile
|
|
else:
|
|
mode = QFileDialog.FileMode.Directory
|
|
|
|
dialog.setFileMode(mode)
|
|
|
|
if dialog.exec_():
|
|
file_names = dialog.selectedFiles()
|
|
callback(file_names)
|
|
|
|
def message_box(self, value,
|
|
text: str,
|
|
informative_text: str,
|
|
window_title: str = "Warning"):
|
|
msg = QMessageBox()
|
|
msg.setIcon(QMessageBox.Warning)
|
|
msg.setText(f"{value} : {text}")
|
|
msg.setInformativeText(f"{informative_text}")
|
|
msg.setWindowTitle(f"{window_title}")
|
|
# msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
|
|
_width = len(f"{text} : {value}")
|
|
msg.setStyleSheet("QLabel{min-width:200 px; font-size: 13px;} QPushButton{width:10px; font-size: 12px};"
|
|
"background-color: Ligthgray; color : gray; font-size: 8pt; color: #888a80;")
|
|
msg.exec_()
|