import os import sys from PyQt5 import QtWidgets, uic def resource_path(relative_path): if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path) def clear_layout(layout): for i in reversed(range(layout.count())): item = layout.itemAt(i) widget = item.widget() if widget: widget.close() layout.removeItem(item) def depends_on(thread_object_name): def decorator(func): def wrapper(self): getattr(self, thread_object_name).join() return func(self) return wrapper return decorator class Ui: ui = None def __init__(self): super().__init__() if self.ui: uic.loadUi(resource_path(self.ui), self) class UiWindow(QtWidgets.QMainWindow, Ui): pass class UiWidget(QtWidgets.QWidget, Ui): pass