mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-11-11 16:19:17 +05:00
[bos #35148][EDF] (2023-T1) Evaluation of PySide. Update t_shape dialog and uic file compilation for testing SalomePyQt methods.
This commit is contained in:
parent
f7a34e7081
commit
7808f71cac
@ -66,6 +66,7 @@ OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON)
|
||||
|
||||
# Advanced options:
|
||||
OPTION(SALOME_BUILD_GUI "Enable GUI" ON)
|
||||
OPTION(SALOME_USE_PYSIDE "Use PySide2 to create Python bindings for Qt" ON)
|
||||
CMAKE_DEPENDENT_OPTION(SALOME_GEOM_USE_OPENCV "Enable shape recognition from picture" OFF
|
||||
"SALOME_BUILD_GUI" OFF)
|
||||
CMAKE_DEPENDENT_OPTION(SALOME_GEOM_USE_VTK "Enable VTK-dependent functionality" ON
|
||||
|
@ -43,7 +43,77 @@ IF(SALOME_BUILD_GUI)
|
||||
)
|
||||
|
||||
# scripts / pyuic wrappings
|
||||
PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic)
|
||||
IF(SALOME_USE_PYSIDE)
|
||||
|
||||
MESSAGE(STATUS "SALOME_USE_PYSIDE is defined. Start compilation with PySide2.")
|
||||
|
||||
# ========================== Find PySide2 uic compiler =================
|
||||
|
||||
# In Qt for Python 5.14.0 pyside2-uic/pyside2-rcc was replaced by uic/rcc
|
||||
# which now have an option to generate Python.
|
||||
# So, the stuff below will work only with Qt for Python >= 5.14.0
|
||||
SET(uic_compiler_names
|
||||
uic
|
||||
)
|
||||
|
||||
SET(uic_compiler_hints
|
||||
/usr/bin/uic
|
||||
)
|
||||
|
||||
FIND_PROGRAM(uic_compiler NAMES ${uic_compiler_names} HINTS ${uic_compiler_hints})
|
||||
IF(uic_compiler)
|
||||
MESSAGE(STATUS "Found PySide2 uic tool: ${uic_compiler}")
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "Couldn't find PySide2 uic tool!")
|
||||
ENDIF()
|
||||
|
||||
# ========================== Generate Python class for each uic file =================
|
||||
|
||||
SET(_pyuic_SCRIPTS)
|
||||
SET(_target_name_pyuic)
|
||||
SET(uic_options -g python)
|
||||
|
||||
FOREACH(uic_infile ${_pyuic_FILES})
|
||||
|
||||
# Make a file name
|
||||
GET_FILENAME_COMPONENT(uic_outfile ${uic_infile} NAME)
|
||||
STRING(REPLACE ".ui" "_ui.py" uic_outfile ${uic_outfile})
|
||||
SET(uic_outfile ${CMAKE_CURRENT_BINARY_DIR}/${uic_outfile})
|
||||
|
||||
# We need to use absolute path for a command
|
||||
SET(uic_infile ${CMAKE_CURRENT_SOURCE_DIR}/${uic_infile})
|
||||
|
||||
SET(uic_command_options ${uic_options} -o ${uic_outfile} ${uic_infile})
|
||||
MESSAGE(STATUS "uic_command_options: ${uic_command_options}")
|
||||
|
||||
# Create a command to call uic
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${uic_outfile}
|
||||
COMMAND ${uic_compiler} ${uic_command_options}
|
||||
MAIN_DEPENDENCY ${uic_infile}
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
# Set additional properties
|
||||
SET_SOURCE_FILES_PROPERTIES(${uic_infile} PROPERTIES SKIP_AUTOUIC ON)
|
||||
SET_SOURCE_FILES_PROPERTIES(${uic_outfile} PROPERTIES SKIP_AUTOMOC ON)
|
||||
SET_SOURCE_FILES_PROPERTIES(${uic_outfile} PROPERTIES SKIP_AUTOUIC ON)
|
||||
|
||||
# Save the result
|
||||
LIST(APPEND _pyuic_SCRIPTS ${uic_outfile})
|
||||
MESSAGE(STATUS "_pyuic_SCRIPTS: ${_pyuic_SCRIPTS}")
|
||||
|
||||
# Make target name the same way as for PyQt
|
||||
_PYQT_WRAP_GET_UNIQUE_TARGET_NAME(BUILD_UI_PY_FILES _target_name_pyuic_cur)
|
||||
ADD_CUSTOM_TARGET(${_target_name_pyuic_cur} ALL DEPENDS ${${_pyuic_SCRIPTS}})
|
||||
|
||||
LIST(APPEND _target_name_pyuic ${_target_name_pyuic_cur})
|
||||
|
||||
ENDFOREACH()
|
||||
|
||||
ELSE()
|
||||
PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# --- rules ---
|
||||
|
@ -20,7 +20,18 @@
|
||||
# Author : Renaud Nédélec (OpenCascade S.A.S)
|
||||
|
||||
import sys
|
||||
from qtsalome import *
|
||||
import os
|
||||
|
||||
# PySide testing
|
||||
import SalomePyQt
|
||||
|
||||
# Check if SalomePyQt uses PySide2
|
||||
use_pyside = False
|
||||
if hasattr(SalomePyQt, 'use_pyside'):
|
||||
from PySide2.QtWidgets import QWidget, QApplication
|
||||
use_pyside = True
|
||||
else:
|
||||
from qtsalome import *
|
||||
|
||||
from salome.geom.t_shape.t_shape_dialog_ui import Ui_Dialog
|
||||
|
||||
@ -40,6 +51,31 @@ class TShapeDialog(Ui_Dialog,QWidget):
|
||||
self.dsb_bigHeight.setValue(80.0)
|
||||
self.dsb_smallHeight.setValue(80.0)
|
||||
|
||||
# PySide testing
|
||||
self.dsb_getFileNameBtn.clicked.connect(self.get_file_name)
|
||||
self.set_qt_bindings()
|
||||
|
||||
def get_file_name(self):
|
||||
"""
|
||||
Updates displayed file name for testing PySide integration.
|
||||
"""
|
||||
|
||||
salome_py_qt = SalomePyQt.SalomePyQt()
|
||||
filename = salome_py_qt.getFileName(self, os.path.expanduser("~"), [], self.tr("Testing getting a file name with PySide"), True)
|
||||
if not filename:
|
||||
return
|
||||
|
||||
self.dsb_fileName.setText(filename)
|
||||
|
||||
def set_qt_bindings(self):
|
||||
"""
|
||||
Returns a name of packaged that used for Qt bindings.
|
||||
This function is only for testing PySide integration.
|
||||
"""
|
||||
|
||||
qt_bindings = 'PySide2' if use_pyside else 'PyQt5'
|
||||
self.dsb_qt_bindings_value.setText(qt_bindings)
|
||||
|
||||
def accept(self):
|
||||
from salome.geom.t_shape import t_shape_progress
|
||||
import xalome
|
||||
@ -72,6 +108,21 @@ class TShapeDialog(Ui_Dialog,QWidget):
|
||||
return self._wasOk
|
||||
|
||||
__dialog=None
|
||||
|
||||
def update_pyside(dialog):
|
||||
"""
|
||||
This function updates displayed data for testing PySide integration.
|
||||
"""
|
||||
salome_py_qt = SalomePyQt.SalomePyQt()
|
||||
|
||||
# Main frame width
|
||||
main_frame_width = salome_py_qt.getMainFrame().width()
|
||||
dialog.dsb_widthMainFrameValue.setText(str(main_frame_width))
|
||||
|
||||
# Components
|
||||
components = salome_py_qt.getComponents()
|
||||
dialog.dsb_components.addItems(components)
|
||||
|
||||
def getDialog():
|
||||
"""
|
||||
This function returns a singleton instance of the plugin dialog.
|
||||
@ -80,6 +131,8 @@ def getDialog():
|
||||
global __dialog
|
||||
if __dialog is None:
|
||||
__dialog = TShapeDialog()
|
||||
|
||||
update_pyside(__dialog)
|
||||
return __dialog
|
||||
|
||||
# ================
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>349</width>
|
||||
<height>283</height>
|
||||
<height>524</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -98,15 +98,18 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="cb_buildSolid">
|
||||
<property name="text">
|
||||
<string>Build solid part</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
@ -127,17 +130,102 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="cb_buildSolid">
|
||||
<property name="text">
|
||||
<string>Build solid part</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
<layout class="QGridLayout" name="gridLayout_PySide">
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QListWidget" name="dsb_components"/>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QLabel" name="dsb_fileName">
|
||||
<property name="text">
|
||||
<string>Initial value</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="dsb_getFileNameBtn">
|
||||
<property name="text">
|
||||
<string>Get File Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="SalomePyQt_title">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p><span style=" font-size:12pt; font-weight:600;">SalomePyQt testing</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="Line" name="line">
|
||||
<property name="lineWidth">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="widthMainFrameTitle">
|
||||
<property name="text">
|
||||
<string>Width main frame (px):</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="dsb_widthMainFrameValue">
|
||||
<property name="text">
|
||||
<string>Initial value</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="qt_bindings_title">
|
||||
<property name="text">
|
||||
<string>Qt bindings package:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="dsb_qt_bindings_value">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
Loading…
Reference in New Issue
Block a user