Source code for pyleecan.GUI.Dialog.DMachineSetup.SMHoleMag.WHoleMag.WHoleMag

# -*- coding: utf-8 -*-


from PySide2.QtCore import Signal
from PySide2.QtWidgets import QMessageBox, QWidget

from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM50.PHoleM50 import PHoleM50
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM51.PHoleM51 import PHoleM51
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM52.PHoleM52 import PHoleM52
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM52R.PHoleM52R import PHoleM52R
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM53.PHoleM53 import PHoleM53
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM54.PHoleM54 import PHoleM54
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM57.PHoleM57 import PHoleM57
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleM58.PHoleM58 import PHoleM58
from ......GUI.Dialog.DMachineSetup.SMHoleMag.PHoleMUD.PHoleMUD import PHoleMUD
from ......GUI.Dialog.DMachineSetup.SMHoleMag.WHoleMag.Ui_WHoleMag import Ui_WHoleMag


[docs]class WHoleMag(Ui_WHoleMag, QWidget): """Widget to Setup a single Hole in a list""" # Signal to DMachineSetup to know that the save popup is needed saveNeeded = Signal() def __init__(self, parent, is_mag, index, material_dict): """Initialize the GUI according to lamination Parameters ---------- self : WHoleMag A WHoleMag object parent : A parent object containing the lamination (LamHole) to edit is_mag : bool False: no magnet in the Hole (for the SyRM) index : int Index of the hole to edit material_dict: dict Materials dictionary (library + machine) """ # Build the interface according to the .ui file QWidget.__init__(self) self.setupUi(self) self.is_stator = False self.obj = parent.obj self.index = index self.is_mag = is_mag self.parent = parent self.material_dict = material_dict # Adapt the GUI to the current machine if is_mag: # IPMSM self.wid_list = [ PHoleM50, PHoleM51, PHoleM52, PHoleM52R, PHoleM53, PHoleM57, PHoleM58, PHoleMUD, ] else: # SyRM self.wid_list = [ PHoleM50, PHoleM51, PHoleM52, PHoleM52R, PHoleM53, PHoleM54, PHoleM57, PHoleM58, PHoleMUD, ] self.type_list = [wid.hole_type for wid in self.wid_list] self.name_list = [wid.hole_name for wid in self.wid_list] # Avoid erase all the parameters when navigating though the holes self.previous_hole = dict() for hole_type in self.type_list: self.previous_hole[hole_type] = None # Fill the combobox with the available hole self.c_hole_type.clear() for hole in self.name_list: self.c_hole_type.addItem(hole) self.c_hole_type.setCurrentIndex( self.type_list.index(type(self.obj.hole[index])) ) # Regenerate the pages with the new values self.w_hole.setParent(None) self.w_hole = self.wid_list[self.c_hole_type.currentIndex()]( hole=self.obj.hole[index], material_dict=self.material_dict ) # Refresh the GUI self.main_layout.removeWidget(self.w_hole) self.main_layout.insertWidget(1, self.w_hole) # Connect the slot self.c_hole_type.currentIndexChanged.connect(self.set_hole_type)
[docs] def emit_save(self): """Send a saveNeeded signal to the DMachineSetup""" self.saveNeeded.emit()
[docs] def set_hole_type(self, c_index): """Initialize self.obj with the hole corresponding to index Parameters ---------- self : WHoleMag A WHoleMag object c_index : int Index of the selected hole type in the combobox """ # Save the hole hole = self.obj.hole[self.index] self.previous_hole[type(hole)] = hole # Call the corresponding constructor Zh = hole.Zh if self.previous_hole[self.type_list[c_index]] is None: # No previous hole of this type self.obj.hole[self.index] = self.type_list[c_index]() self.obj.hole[self.index]._set_None() # No default value self.obj.hole[self.index].Zh = Zh if self.is_mag and self.obj.hole[self.index].has_magnet(): # IPMSM magnet = hole.get_magnet_by_id(0) self.obj.hole[self.index].set_magnet_by_id(0, magnet) elif self.obj.hole[self.index].has_magnet(): # SyRM self.obj.hole[self.index].remove_magnet() else: # Load the previous hole of this type self.obj.hole[self.index] = self.previous_hole[self.type_list[c_index]] # Update the GUI self.w_hole.setParent(None) self.w_hole = self.wid_list[c_index]( hole=self.obj.hole[self.index], material_dict=self.material_dict ) self.w_hole.saveNeeded.connect(self.emit_save) # Refresh the GUI self.main_layout.removeWidget(self.w_hole) self.main_layout.insertWidget(1, self.w_hole) # Notify the machine GUI that the machine has changed self.saveNeeded.emit()
[docs] def check(self): """Check that the current machine have all the needed field set Parameters ---------- self : WHoleMag A WHoleMag widget Returns ------- error : str Error message (return None if no error) """ return self.w_hole.check()