mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			125 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # -*- coding: utf-8 -*- | ||
|  | """Script to process UI files (convert .ui to .py).
 | ||
|  | 
 | ||
|  | It compiles .ui files to be used with PyQt4, PyQt5, PySide, QtPy, PyQtGraph. | ||
|  | You just need to run (it has default values) from script folder. | ||
|  | 
 | ||
|  | To run this script you need to have these tools available on system: | ||
|  | 
 | ||
|  |     - pyuic4 for PyQt4 and PyQtGraph | ||
|  |     - pyuic5 for PyQt5 and QtPy | ||
|  |     - pyside-uic for Pyside | ||
|  |     - pyside2-uic for Pyside2 | ||
|  | 
 | ||
|  | Links to understand those tools: | ||
|  | 
 | ||
|  |     - pyuic4: http://pyqt.sourceforge.net/Docs/PyQt4/designer.html#pyuic4 | ||
|  |     - pyuic5: http://pyqt.sourceforge.net/Docs/PyQt5/designer.html#pyuic5 | ||
|  |     - pyside-uic: https://www.mankier.com/1/pyside-uic | ||
|  |     - pyside2-uic: https://wiki.qt.io/Qt_for_Python_UiFiles (Documentation Incomplete) | ||
|  | 
 | ||
|  | """
 | ||
|  | 
 | ||
|  | from __future__ import absolute_import, print_function | ||
|  | 
 | ||
|  | import argparse | ||
|  | import glob | ||
|  | import os | ||
|  | import sys | ||
|  | from subprocess import call | ||
|  | 
 | ||
|  | 
 | ||
|  | def main(arguments): | ||
|  |     """Process UI files.""" | ||
|  |     parser = argparse.ArgumentParser(description=__doc__, | ||
|  |                                      formatter_class=argparse.RawDescriptionHelpFormatter) | ||
|  |     parser.add_argument('--ui_dir', | ||
|  |                         default='../example/ui', | ||
|  |                         type=str, | ||
|  |                         help="UI files directory, relative to current directory.",) | ||
|  |     parser.add_argument('--create', | ||
|  |                         default='all', | ||
|  |                         choices=['pyqt', 'pyqt5', 'pyside', 'pyside2', 'qtpy', 'pyqtgraph', 'all'], | ||
|  |                         type=str, | ||
|  |                         help="Choose which one would be generated.") | ||
|  | 
 | ||
|  |     args = parser.parse_args(arguments) | ||
|  | 
 | ||
|  |     print('Changing directory to: ', args.ui_dir) | ||
|  |     os.chdir(args.ui_dir) | ||
|  | 
 | ||
|  |     print('Converting .ui to .py ...') | ||
|  | 
 | ||
|  |     for ui_file in glob.glob('*.ui'): | ||
|  |         # get name without extension | ||
|  |         filename = os.path.splitext(ui_file)[0] | ||
|  |         print(filename, '...') | ||
|  |         ext = '.py' | ||
|  | 
 | ||
|  |         # creating names | ||
|  |         py_file_pyqt5 = filename + '_pyqt5_ui' + ext | ||
|  |         py_file_pyqt = filename + '_pyqt_ui' + ext | ||
|  |         py_file_pyside = filename + '_pyside_ui' + ext | ||
|  |         py_file_pyside2 = filename + '_pyside2_ui' + ext | ||
|  |         py_file_qtpy = filename + '_qtpy_ui' + ext | ||
|  |         py_file_pyqtgraph = filename + '_pyqtgraph_ui' + ext | ||
|  | 
 | ||
|  |         # calling external commands | ||
|  |         if args.create in ['pyqt', 'pyqtgraph', 'all']: | ||
|  |             try: | ||
|  |                 call(['pyuic4', '--from-imports', ui_file, '-o', py_file_pyqt]) | ||
|  |             except Exception as er: | ||
|  |                 print("You must install pyuic4 %s" % str(er)) | ||
|  |             else: | ||
|  |                 print("Compiling using pyuic4 ...") | ||
|  | 
 | ||
|  |         if args.create in ['pyqt5', 'qtpy', 'all']: | ||
|  |             try: | ||
|  |                 call(['pyuic5', '--from-imports', ui_file, '-o', py_file_pyqt5]) | ||
|  |             except Exception as er: | ||
|  |                 print("You must install pyuic5 %s" % str(er)) | ||
|  |             else: | ||
|  |                 print("Compiling using pyuic5 ...") | ||
|  | 
 | ||
|  |         if args.create in ['pyside', 'all']: | ||
|  |             try: | ||
|  |                 call(['pyside-uic', '--from-imports', ui_file, '-o', py_file_pyside]) | ||
|  |             except Exception as er: | ||
|  |                 print("You must install pyside-uic %s" % str(er)) | ||
|  |             else: | ||
|  |                 print("Compiling using pyside-uic ...") | ||
|  | 
 | ||
|  |         if args.create in ['pyside2', 'all']: | ||
|  |             try: | ||
|  |                 call(['pyside2-uic', '--from-imports', ui_file, '-o', py_file_pyside2]) | ||
|  |             except Exception as er: | ||
|  |                 print("You must install pyside2-uic %s" % str(er)) | ||
|  |             else: | ||
|  |                 print("Compiling using pyside2-uic ...") | ||
|  | 
 | ||
|  |         if args.create in ['qtpy', 'all']: | ||
|  |             print("Creating also for qtpy ...") | ||
|  |             # special case - qtpy - syntax is PyQt5 | ||
|  |             with open(py_file_pyqt5, 'r') as file: | ||
|  |                 filedata = file.read() | ||
|  |             # replace the target string | ||
|  |             filedata = filedata.replace('from PyQt5', 'from qtpy') | ||
|  |             with open(py_file_qtpy, 'w+') as file: | ||
|  |                 # write the file out again | ||
|  |                 file.write(filedata) | ||
|  | 
 | ||
|  |         if args.create in ['pyqtgraph', 'all']: | ||
|  |             print("Creating also for pyqtgraph ...") | ||
|  |             # special case - pyqtgraph - syntax is PyQt4 | ||
|  |             with open(py_file_pyqt, 'r') as file: | ||
|  |                 filedata = file.read() | ||
|  |             # replace the target string | ||
|  |             filedata = filedata.replace('from PyQt4', 'from pyqtgraph.Qt') | ||
|  |             with open(py_file_pyqtgraph, 'w+') as file: | ||
|  |                 # write the file out again | ||
|  |                 file.write(filedata) | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == '__main__': | ||
|  |     sys.exit(main(sys.argv[1:])) |