예제 #1
0
    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_()
예제 #2
0
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)