try: # PyInstaller creates a temp folder and stores path in _MEIPASS # 打包后走这边 print(sys._MEIPASS) base_path = sys._MEIPASS except Exception: # dev时走这边 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) if __name__ == '__main__': app = QApplication([]) view = QDeclarativeView() # 这里相当于传进的成绝对路径了 # path = 'file:///' + resource_path('view.qml') # view.setSource(QUrl(path)) view.setSource(QUrl('qrc:view.qml')) # dev的时候resource_path 就setSource到当前目录下文件了 # 打包完过后 就setSource到那个TMP目录下的文件去了 # 相当于我之前打包的时候,在spec文件中写入了文件,运行时文件才会跑到TMP里去了的 view.setAttribute(Qt.WA_TranslucentBackground) view.setStyleSheet("background-color:transparent") view.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) view.showFullScreen() app.exec_()
class Infoboard(object): def __init__(self, schedule_dir): self.schedule_dir = schedule_dir self.videos = {} self.playlist = [] self.app = QApplication(sys.argv) self.view = QDeclarativeView() self.view.setSource(QUrl('scene.qml')) self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView) self.viewRoot = self.view.rootObject() self.viewRoot.quit.connect(self.app.quit) self.viewRoot.finished.connect(self.show_next) self.view.setGeometry(100, 100, 400, 240) self.view.showFullScreen() self.watcher = QFileSystemWatcher() def schedule_dir_changed(self, filename): self.process_all_schedules() self.playlist = [] def run(self): self.watcher.addPath(self.schedule_dir) self.watcher.directoryChanged.connect(self.schedule_dir_changed) self.process_all_schedules() self.show_next() self.app.exec_() def process_schedule(self, key, fobj): self.videos[key] = [] for line in fobj: line = line.strip() if (not line) or line.startswith('#'): continue try: self.videos[key].append(Video(line)) except: pass def process_all_schedules(self): for filename in glob.glob(self.schedule_dir + '/*.txt'): filename = os.path.abspath(filename) with open(filename, 'rb') as f: self.process_schedule(filename, f) def show_next(self): item = self.playlist_next() if not item: return if item.type == 'image': self.viewRoot.showImage(item.filename) QTimer.singleShot(item.duration * 1000, self.show_next) elif item.type == 'video': self.viewRoot.showVideo(item.filename) def playlist_next(self): if len(self.playlist) == 0: self.process_all_schedules() today = date.today() all_videos = [] for key in sorted(self.videos.keys()): all_videos += self.videos[key] self.playlist = [video for video in all_videos if video.start_date <= today and video.end_date >= today] if len(self.playlist) == 0: return None return self.playlist.pop(0)