Esempio n. 1
0
 def drawCharts(self, frame: QFrame):
     """вывод графика в рисунок и в frame"""
     # logger.debug(self.drawCharts.__doc__)
     pic = self.renderToImage(frame.size())
     palette = frame.palette()
     palette.setBrush(QPalette.Background, QBrush(pic))
     frame.setPalette(palette)
     frame.setAutoFillBackground(True)
Esempio n. 2
0
    def set_paragraph(self, h2='', h3='', text='', img=None):
        if h2 != '':
            lbl_h2 = QLabel(h2, self.inner)
            fnt = lbl_h2.font()
            fnt.setPointSize(self.H2_FONT_SIZE)
            lbl_h2.setFont(fnt)
            lbl_h2.setFixedHeight(self.H2_HEIGHT)
            lbl_h2.setAlignment(Qt.AlignBottom)
            lbl_h2.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_h2)

            frm = QFrame(self.inner)
            frm.setFrameShape(QFrame.HLine)
            frm.setContentsMargins(self.SIDE_MARGIN, 0, self.SIDE_MARGIN, 0)
            plt = frm.palette()
            plt.setColor(QPalette.WindowText, Qt.darkGray)
            frm.setPalette(plt)
            self.vbox.addWidget(frm)

        if text != '':
            lbl_txt = QLabel(text, self.inner)
            lbl_txt.setWordWrap(True)
            fnt = lbl_txt.font()
            fnt.setPointSize(self.TEXT_FONT_SIZE)
            lbl_txt.setFont(fnt)
            lbl_txt.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_txt)

        if img is not None:
            if self.params.lang == 'en':
                img += '_en.png'
            else:
                img += '_jp.png'
            pixmap = QPixmap(img)
            if not pixmap.isNull():
                lbl_img = QLabel(self.inner)
                lbl_img.setPixmap(pixmap)
                self.lbl_img_list.append(lbl_img)
                self.pixmap_list.append(pixmap.scaledToWidth(pixmap.width()))
                self.vbox.addWidget(lbl_img)

        self.inner.setLayout(self.vbox)
Esempio n. 3
0
    def set_paragraph(self, h2='', h3='', text='', img=None):
        if h2 != '':
            lbl_h2 = QLabel(h2, self.inner)
            fnt = lbl_h2.font()
            fnt.setPointSize(self.H2_FONT_SIZE)
            lbl_h2.setFont(fnt)
            lbl_h2.setFixedHeight(self.H2_HEIGHT)
            lbl_h2.setAlignment(Qt.AlignBottom)
            lbl_h2.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_h2)

            frm = QFrame(self.inner)
            frm.setFrameShape(QFrame.HLine)
            frm.setContentsMargins(self.SIDE_MARGIN, 0, self.SIDE_MARGIN, 0)
            plt = frm.palette()
            plt.setColor(QPalette.WindowText, Qt.darkGray)
            frm.setPalette(plt)
            self.vbox.addWidget(frm)

        if text != '':
            lbl_txt = QLabel(text, self.inner)
            lbl_txt.setWordWrap(True)
            fnt = lbl_txt.font()
            fnt.setPointSize(self.TEXT_FONT_SIZE)
            lbl_txt.setFont(fnt)
            lbl_txt.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_txt)

        if img is not None:
            if self.params.lang == 'en':
                img += '_en.png'
            else:
                img += '_jp.png'
            pixmap = QPixmap(img)
            if not pixmap.isNull():
                lbl_img = QLabel(self.inner)
                lbl_img.setPixmap(pixmap)
                self.lbl_img_list.append(lbl_img)
                self.pixmap_list.append(pixmap.scaledToWidth(pixmap.width()))
                self.vbox.addWidget(lbl_img)

        self.inner.setLayout(self.vbox)
class VlcPlayer:

    def __init__(self):
        try:
            os.remove('vlc.log')
        except:
            pass
        self.instance = vlc.Instance("--verbose=2 --network-caching=1000 --no-snapshot-preview --no-osd --file-logging --logfile=vlc.log")
        self.mediaplayer = self.instance.media_player_new()

    def setMedia(self, mediaFile):

        if sys.version < '3':
            filename = unicode(mediaFile)
        else:
            filename = mediaFile

        self.media = self.instance.media_new(filename)
        self.mediaplayer.set_media(self.media)
        self.media.parse()

    def createWidget(self, parent=None):
        self.videoframe = QFrame(parent)
        self.videoPalette = self.videoframe.palette()
        self.videoPalette.setColor(QPalette.Window,
                              QColor(0, 0, 0))
        self.videoframe.setAutoFillBackground(True)
        self.videoframe.setPalette(self.videoPalette)

        if sys.platform.startswith('linux'):
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

        return self.videoframe
Esempio n. 5
0
class Player(QMainWindow):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        if '--clear' in sys.argv: os.remove('.cache')
        # Read Data
        if not os.path.exists('AllChannel.json'):
            print('Reffering channel info from server.')
            print(
                'If you want to customize channel data, generate AllChannel.json file by generate_SKB_channels.py.',
                file=sys.stderr)
            from generate_SKB_channels import get_channels
            channels = dict([(_['ServiceId'], _) for _ in get_channels()])
        else:
            print('Using AllChannel.json for referring channel info.')
            with open('AllChannel.json', encoding='UTF8') as f:
                channels = dict([(_['ServiceId'], _)
                                 for _ in json.loads(f.read())])

        new_stream_db = read_m3u(sys.argv[1])
        old_stream_db = read_m3u(sys.argv[2])

        stream_urls = [_['multicast'] for _ in new_stream_db]

        if os.path.exists('.cache'):
            with open('.cache', 'rb') as f:
                cache = pickle.loads(f.read())
        else:
            cache = {}

        # Checking broken stream
        global vlc_error_count, vlc_error_check, vlc_handle_mode
        instance = vlc.Instance("--verbose=-1")
        instance.log_set(vlc_log_callback, None)
        mediaplayer = instance.media_player_new()
        mediaplayer.video_set_scale(0.1)
        print('Checking broken stream...')
        for url in tqdm.tqdm(stream_urls):
            if not url in cache:
                vlc_error_count = 0
                vlc_error_check = False
                mediaplayer.set_media(instance.media_new(url))
                mediaplayer.play()
                time.sleep(3)
                cache[url] = vlc_error_check
            with open('.cache', 'wb') as f:
                f.write(pickle.dumps(cache))
        mediaplayer.stop()
        self.stream_verify = cache
        vlc_handle_mode = 1
        ##############################

        playlist = remove_unmapped_channel(old_stream_db, stream_urls)
        playlist = fill_unmapped_channel(playlist, channels)

        self.channel_info = channels
        self.playlist = playlist
        self.stream_urls = stream_urls

        import pprint
        #pprint.pprint(update_db)
        print(len(old_stream_db), len(playlist), len(new_stream_db),
              len(channels))

        # QT Initialize
        QMainWindow.__init__(self, master)
        self.setWindowTitle("Media Player")

        # creating a basic vlc instance
        self.instance = vlc.Instance("--verbose=-1")
        self.instance.log_set(vlc_log_callback, None)
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.createUI()

    def createUI(self):
        """Set up the user interface, signals & slots
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)
        self.videoframe.setMinimumWidth(720)
        self.videoframe.setMinimumHeight(480)

        #self.hbuttonbox = QHBoxLayout()
        #self.openchannel = QPushButton("Open Channel Data")
        #self.hbuttonbox.addWidget(self.openchannel)
        #self.openchannel.clicked.connect(self.PlayPause)

        self.hcontrolbox = QHBoxLayout()
        self.hinfobox = QHBoxLayout()
        self.icon = QLabel()
        self.icon.setFixedSize(200, 60)
        self.icon.setAlignment(Qt.AlignCenter)
        self.hinfobox.addWidget(self.icon)
        self.vinfobox = QVBoxLayout()
        self.ch_name = QLabel("Loading...")
        font = QFont()
        font.setBold(True)
        font.setFamily('Malgun Gothic')
        font.setPointSize(16)
        self.ch_name.setFont(font)
        self.vinfobox.addWidget(self.ch_name)
        self.hservicebox = QHBoxLayout()
        self.hservicebox.addWidget(QLabel('Service ID '))
        self.service_id = QLabel("[#]")
        self.hservicebox.addWidget(self.service_id)
        self.vinfobox.addLayout(self.hservicebox)
        self.hinfobox.addLayout(self.vinfobox)
        self.hcontrolbox.addLayout(self.hinfobox)

        self.hcontrolbox.addStretch(1)
        self.volumeslider = QSlider(Qt.Horizontal, self)
        self.volumeslider.setMaximum(100)
        self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        self.volumeslider.setToolTip("Volume")
        self.hcontrolbox.addWidget(self.volumeslider)
        self.volumeslider.valueChanged.connect(self.setVolume)

        #
        self.channelbox = QVBoxLayout()
        self.channellist = QListWidget()
        self.channellist.setFixedWidth(320)
        self.channellist.itemClicked.connect(self.selectChannel)
        self.channelbox.addWidget(self.channellist)
        self.channelfilter = QLineEdit()
        self.channelfilter.setFixedWidth(320)
        self.channelfilter.textChanged.connect(self.find_channel)
        self.channelbox.addWidget(self.channelfilter)

        self.streambox = QVBoxLayout()
        self.streamlist = QListWidget()
        self.streamlist.setFixedWidth(320)
        self.streamlist.itemClicked.connect(self.selectStream)
        self.streambox.addWidget(self.streamlist)
        self.mapbutton = QPushButton("Map")
        self.mapbutton.clicked.connect(self.map)
        self.streambox.addWidget(self.mapbutton)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addLayout(self.hcontrolbox)

        self.hboxlayout = QHBoxLayout()
        self.hboxlayout.addLayout(self.vboxlayout)
        self.hboxlayout.addLayout(self.channelbox)
        self.hboxlayout.addLayout(self.streambox)

        self.widget.setLayout(self.hboxlayout)

        export = QAction("&Export", self)
        export.triggered.connect(self.ExportFile)
        exit = QAction("E&xit", self)
        exit.triggered.connect(sys.exit)
        menubar = self.menuBar()
        filemenu = menubar.addMenu("&File")
        filemenu.addAction(export)
        filemenu.addSeparator()
        filemenu.addAction(exit)

        self.updatePlaylist()

    def ExportFile(self):
        print(os.path.expanduser('~'))
        #filename = QFileDialog.getSaveFileName(self, "Save File", os.path.expanduser('~'),)[0]
        filename = QFileDialog.getSaveFileName(
            self,
            "Export Playlist File",
            'playlist.m3u',
            "M3U Playlist (*.m3u *.m3u8)",
        )[0]
        if not filename: return
        with open(filename, 'wt', encoding='UTF8') as f:
            f.write('#EXTM3U\n')
            for item in [
                    self.channellist.item(_)
                    for _ in range(self.channellist.count())
            ]:
                if item.checkState():
                    data = item.data(Qt.UserRole)
                    f.write(
                        f"#EXTINF:-1 tvg-id=\"{data['tvg-id']}\" tvg-logo=\"{data['tvg-logo']}\" tvg-chno=\"{data['tvh-chnum']}\" tvh-chnum=\"{data['tvh-chnum']}\", {data['ch-name']}\n"
                    )
                    f.write(f"{data['multicast']}\n")
        filename = QFileDialog.getSaveFileName(
            self,
            "Export Channel File",
            'Channel.json',
            "JSON File (*.json)",
        )[0]
        if not filename: return
        channels = []
        for item in [
                self.channellist.item(_)
                for _ in range(self.channellist.count())
        ]:
            if item.checkState():
                data = item.data(Qt.UserRole)
                channels.append(self.channel_info[data['tvg-id']])
        with open(filename, 'wt', encoding='UTF8') as f:
            f.write(json.dumps(channels, indent=2))

    def setVolume(self, Volume):
        """Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def find_channel(self, text):
        if text:
            for item in [
                    self.channellist.item(_)
                    for _ in range(self.channellist.count())
            ]:
                if item.text().lower().find(text.lower()) >= 0:
                    item.setHidden(False)
                else:
                    item.setHidden(True)
        else:
            for item in [
                    self.channellist.item(_)
                    for _ in range(self.channellist.count())
            ]:
                item.setHidden(False)

    def map(self, *args, **kwargs):
        item = self.channellist.currentItem()
        item.setCheckState(Qt.Checked)
        channel = item.data(Qt.UserRole)
        sitem = self.streamlist.currentItem()
        radio = self.streamlist.itemWidget(sitem)
        channel['multicast'] = radio.text()
        item.setData(Qt.UserRole, channel)
        self.updateMappedInfo()

    def playStream(self, stream_url):
        global vlc_error_count, vlc_error_check
        vlc_error_count = 0
        vlc_error_check = False

        self.media = self.instance.media_new(stream_url)
        # put the media in the media player
        self.mediaplayer.set_media(self.media)

        # parse the metadata of the file
        self.media.parse()
        # set the title of the track as window title
        self.setWindowTitle(self.media.get_meta(0))

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have different functions for this
        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

        self.mediaplayer.play()

    def selectChannel(self, item):
        global vlc_error_count, vlc_error_check
        vlc_error_count = 0
        vlc_error_check = False

        channel = item.data(Qt.UserRole)
        print(channel)
        if 'multicast' in channel and channel['multicast']:
            streams = dict([(item.data(Qt.UserRole), item) for item in [
                self.streamlist.item(_) for _ in range(self.streamlist.count())
            ]])
            if channel['multicast'] in streams:
                self.selectStream(streams[channel['multicast']])
            else:
                item.setCheckState(Qt.Unchecked)
        else:
            item.setCheckState(Qt.Unchecked)

        self.ch_name.setText(channel['ch-name'])
        frame = self.getIcon(channel['tvg-logo'])
        pixmap = QPixmap()
        pixmap.loadFromData(frame)
        self.icon.setPixmap(
            pixmap.scaled(self.icon.width(), self.icon.height(),
                          Qt.KeepAspectRatio))
        self.service_id.setText(f"[{channel['tvg-id']}]")

    def updateStreamRadioState(self, state):
        if state:
            found = False
            for item in [
                    self.streamlist.item(_)
                    for _ in range(self.streamlist.count())
            ]:
                radio = self.streamlist.itemWidget(item)
                if radio.isChecked():
                    self.channellist.currentItem().setCheckState(Qt.Checked)
                    item.setText("")
                    self.streamlist.setCurrentItem(item)
                    self.streamlist.update(self.streamlist.currentIndex())
                    self.selectStreamImpl(item)
                    found = True
                    break
            if not found:
                item = self.streamlist.item(0)
                self.streamlist.setCurrentItem(item)
                self.selectStreamImpl(item)

    def selectStream(self, item):
        stream_info = item.data(Qt.UserRole)
        radio = self.streamlist.itemWidget(item)
        radio.setChecked(True)

    def selectStreamImpl(self, item):
        global vlc_error_count, vlc_error_check
        vlc_error_count = 0
        vlc_error_check = False

        radio = self.streamlist.itemWidget(item)
        url = radio.text()
        item.setData(Qt.UserRole, url)
        print('URL from Radio :', url)

        if url:
            self.playStream(url)
            #citem = self.channellist.currentItem()
            #data = citem.data(Qt.UserRole)
            #data['multicast'] = url
            #citem.setData(Qt.UserRole, data)
            #print('Saved URL :', url)
        else:
            pass
            #self.mediaplayer.pause()
            #citem = self.channellist.currentItem()
            #data = citem.data(Qt.UserRole)
            #data['multicast'] = None
            #citem.setData(Qt.UserRole, data)
            #print('Saved URL :', None)
        self.updateMappedInfo()

    def getMappedDict(self):
        mapped_dict = {}
        for item in [
                self.channellist.item(_)
                for _ in range(self.channellist.count())
        ]:
            data = item.data(Qt.UserRole)
            if data['multicast']:
                if data['multicast'] in mapped_dict:
                    mapped_dict[data['multicast']].append(data['ch-name'])
                else:
                    mapped_dict[data['multicast']] = [data['ch-name']]
        return mapped_dict

    def updateMappedInfo(self):
        print('UpdateMappedInfo')
        mapped_dict = self.getMappedDict()
        for item in [
                self.streamlist.item(_) for _ in range(self.streamlist.count())
        ]:
            url = item.data(Qt.UserRole)
            if url == '__BROKEN__':
                item.setText("*** BROKEN ***")
            elif url in mapped_dict:
                item.setText(f"[{','.join(mapped_dict[url])}]"
                             if mapped_dict[url] else "")
            else:
                item.setText("")
            self.streamlist.update(self.streamlist.indexFromItem(item))

    def disableChannel(self):
        self.channellist.currentItem().setCheckState(Qt.Unchecked)
        self.channellist.update(self.channellist.currentIndex())
        data = self.channellist.currentItem().data(Qt.UserRole)
        data['multicast'] = None
        self.channellist.currentItem().setData(Qt.UserRole, data)

        self.streamlist.update(self.streamlist.currentIndex())
        self.streamlist.currentItem().setData(Qt.UserRole, '__BROKEN__')

        self.updateMappedInfo()
        #app.processEvents()

    @functools.lru_cache(maxsize=None)
    def getIcon(self, url):
        req = request.Request(url)
        req.add_header(
            'User-Agent',
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
        )
        frame = None
        for _ in range(3):
            try:
                resp = request.urlopen(req)
                frame = resp.read()
                break
            except:
                time.sleep(1)
        return frame

    def attachIcon(self, item):
        channel = item.data(Qt.UserRole)
        url = channel['tvg-logo']
        pixmap = QPixmap()
        pixmap.loadFromData(self.getIcon(url))
        item.setIcon(QIcon(pixmap))

    def asyncCacheIcon(self):
        def asyncThread(listwidget):
            for item in [
                    listwidget.item(_) for _ in range(listwidget.count())
            ]:
                channel = item.data(Qt.UserRole)
                self.attachIcon(item)
                listwidget.update(listwidget.indexFromItem(item))

        threading.Thread(target=asyncThread,
                         args=(self.channellist, ),
                         daemon=True).start()

    def updatePlaylist(self):
        self.channellist.clear()
        for channel in self.playlist:
            item = QListWidgetItem()
            item.setData(Qt.UserRole, channel)
            item.setText(f"[{channel['tvh-chnum']}] {channel['ch-name']}")
            item.setCheckState(Qt.Checked if channel['multicast']
                               and not self.stream_verify[channel['multicast']]
                               else Qt.Unchecked)
            self.channellist.addItem(item)

        item = QListWidgetItem()
        item.setData(Qt.UserRole, '')
        self.streamlist.addItem(item)
        radio = QRadioButton('Unbound Stream URL')
        radio.toggled.connect(self.updateStreamRadioState)
        self.streamlist.setItemWidget(item, radio)
        for url in self.stream_urls:
            item = QListWidgetItem()
            item.setTextAlignment(Qt.AlignRight)
            item.setData(Qt.UserRole,
                         '__BROKEN__' if self.stream_verify[url] else url)
            self.streamlist.addItem(item)
            radio = QRadioButton(url)
            radio.toggled.connect(self.updateStreamRadioState)
            self.streamlist.setItemWidget(item, radio)

        self.updateMappedInfo()
        self.asyncCacheIcon()

        def delayedSelectChannel(n):
            time.sleep(n)
            self.channellist.setCurrentRow(0)
            self.selectChannel(self.channellist.currentItem())

        threading.Thread(target=delayedSelectChannel, args=(3, ),
                         daemon=True).start()
Esempio n. 6
0
class Player(QMainWindow):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        self.setWindowTitle("Media Player")

        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.createUI()
        self.isPaused = False

    def createUI(self):
        """Set up the user interface, signals & slots
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.hbuttonbox = QHBoxLayout()
        self.playbutton = QPushButton("Play")
        self.hbuttonbox.addWidget(self.playbutton)
        self.playbutton.clicked.connect(self.PlayPause)

        self.stopbutton = QPushButton("Stop")
        self.hbuttonbox.addWidget(self.stopbutton)
        self.stopbutton.clicked.connect(self.Stop)

        self.hbuttonbox.addStretch(1)
        self.volumeslider = QSlider(Qt.Horizontal, self)
        self.volumeslider.setMaximum(100)
        self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        self.volumeslider.setToolTip("Volume")
        self.hbuttonbox.addWidget(self.volumeslider)
        self.volumeslider.valueChanged.connect(self.setVolume)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addLayout(self.hbuttonbox)

        self.widget.setLayout(self.vboxlayout)

        open = QAction("&Connect", self)
        open.triggered.connect(self.OpenStreaming)
        exit = QAction("&Exit", self)
        exit.triggered.connect(sys.exit)
        menubar = self.menuBar()
        filemenu = menubar.addMenu("&File")
        filemenu.addAction(open)
        filemenu.addSeparator()
        filemenu.addAction(exit)

    def PlayPause(self):
        """Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.playbutton.setText("Play")
            self.isPaused = True
        else:
            if self.mediaplayer.play() == -1:
                self.OpenStreaming()
                return
            self.mediaplayer.play()
            self.playbutton.setText("Pause")
            self.isPaused = False

    def Stop(self):
        """Stop player
        """
        self.mediaplayer.stop()
        self.playbutton.setText("Play")

    def OpenStreaming(self, url=None):
        """Open a alert asking the user a URL
        """

        print("original url:", url)

        if url is None or not url:
            url, okPressed = QInputDialog.getText(
                self, "RSTP streaming URL", "URL:", QLineEdit.Normal,
                "rtsp://127.0.0.1:8554/live.sdp")

            if not okPressed or len(url) <= 0:
                return

        print("used url:", url)

        self.mediaplayer.video_set_mouse_input(False)
        self.mediaplayer.video_set_key_input(False)
        self.mediaplayer.set_mrl(url, "network-caching=300")
        self.mediaplayer.audio_set_mute(
            False)  # change to True if MUTE is necessary!

        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

        self.PlayPause()

    def setVolume(self, Volume):
        """Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)
Esempio n. 7
0
class Player(QMainWindow):
    """
    Modification of the simple Media Player using VLC and Qt
    to show the mambo stream

    The window part of this example was modified from the QT example cited below.
    VLC requires windows to create and show the video and this was a cross-platform solution.
    VLC will automatically create the windows in linux but not on the mac.
    Amy McGovern, [email protected]

    Qt example for VLC Python bindings
    https://github.com/devos50/vlc-pyqt5-example
    Copyright (C) 2009-2010 the VideoLAN team

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
    """
    def __init__(self, vlc_player, drone_gui, move, process):
        """
        Create a UI window for the VLC player
        :param vlc_player: the VLC player (created outside the function)
        """
        self.process = process
        QMainWindow.__init__(self)
        self.move = move
        self.setWindowTitle("VLC Drone Video Player")

        # save the media player
        self.mediaplayer = vlc_player

        # need a reference to the main drone vision class
        self.drone_vision = drone_gui

        # create the GUI
        self.createUI()

    def set_values(self, yaw, pitch):
        pass
        # self.yaw_bar.setValue(yaw)
        # self.pitch_bar.setValue(pitch)

    # here the GUI and all it's buttons are created
    def createUI(self):
        """
        Set up the window for the VLC viewer
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.hbuttonbox = QHBoxLayout()
        self.raise_lower_box = QHBoxLayout()
        self.forward_box = QHBoxLayout()
        self.left_right_box = QHBoxLayout()
        self.backward_box = QHBoxLayout()
        self.toggle_box = QHBoxLayout()

        self.playbutton = QPushButton("Start")
        self.hbuttonbox.addWidget(self.playbutton)
        self.playbutton.clicked.connect(partial(self.move.restart))

        self.landbutton = QPushButton("Land NOW")
        self.hbuttonbox.addWidget(self.landbutton)
        self.landbutton.clicked.connect(self.drone_vision.land)

        self.landsafebutton = QPushButton("Land safe")
        self.hbuttonbox.addWidget(self.landsafebutton)
        self.landsafebutton.clicked.connect(self.move.kill)

        self.stopbutton = QPushButton("Quit")
        self.hbuttonbox.addWidget(self.stopbutton)
        self.stopbutton.clicked.connect(self.drone_vision.close_exit)

        self.raise_button = QPushButton("Raise Drone")
        self.raise_lower_box.addWidget(self.raise_button)
        self.raise_button.clicked.connect(self.move.raise_drone)

        self.lower_button = QPushButton("Lower Drone")
        self.raise_lower_box.addWidget(self.lower_button)
        self.lower_button.clicked.connect(self.move.lower_drone)

        self.forward_button = QPushButton("^")
        self.forward_box.addWidget(self.forward_button)
        self.forward_button.clicked.connect(self.move.drone_forward)

        self.left_button = QPushButton("<")
        self.hover_button = QPushButton("o")
        self.right_button = QPushButton(">")

        self.left_right_box.addWidget(self.left_button)
        self.left_right_box.addWidget(self.hover_button)
        self.left_right_box.addWidget(self.right_button)

        self.left_button.clicked.connect(self.move.drone_left)
        self.hover_button.clicked.connect(self.move.drone_hover)
        self.right_button.clicked.connect(self.move.drone_right)

        self.backward_button = QPushButton("v")
        self.backward_box.addWidget(self.backward_button)
        self.backward_button.clicked.connect(self.move.drone_right)

        self.rotation_button = QPushButton("Rotation Track")
        self.toggle_box.addWidget(self.rotation_button)
        self.rotation_button.clicked.connect(self.move.rotate_true)

        self.fixed_button = QPushButton("Fixed Track")
        self.toggle_box.addWidget(self.fixed_button)
        self.fixed_button.clicked.connect(self.move.rotate_false)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addLayout(self.hbuttonbox)
        self.vboxlayout.addLayout(self.raise_lower_box)
        self.vboxlayout.addLayout(self.forward_box)
        self.vboxlayout.addLayout(self.left_right_box)
        self.vboxlayout.addLayout(self.backward_box)
        self.vboxlayout.addLayout(self.toggle_box)

        # determined how far away from the tracked object the drone should be
        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setGeometry(30, 40, 100, 30)
        sld.setValue(60)
        sld.valueChanged[int].connect(self.change_box_size_max)

        sld1 = QSlider(Qt.Horizontal, self)
        sld1.setFocusPolicy(Qt.NoFocus)
        sld1.setGeometry(30, 40, 100, 30)
        sld1.setValue(40)
        sld1.valueChanged[int].connect(self.change_box_size_min)
        sld1.move(30, 60)

        # shows how much the drone 'wants' to rotate to the left/right
        # (this corresponds to where on the x-axis the tracked object is)
        # self.yaw_bar = QProgressBar(self)
        # self.yaw_bar.setGeometry(30, 40, 200, 25)
        # self.yaw_bar.move(0, 100)
        #
        # # shows how much the drone 'wants' to go forwards/backwards
        # # (corresponds to how far away the tracked object is)
        # self.pitch_bar = QProgressBar(self)
        # self.pitch_bar.setGeometry(30, 40, 200, 25)
        # self.pitch_bar.move(0, 200)
        # self.pitch_bar.setValue(60)

        self.label = QLabel(self)

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QSlider')
        self.show()

        self.widget.setLayout(self.vboxlayout)

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have different functions for this
        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

    def change_box_size_max(self, value):
        # convert the slider input to 0 to 1 and feed it to the movement function
        self.process.set_max_box_size(value / (100))

    def change_box_size_min(self, value):
        # convert the slider input to 0 to 1 and feed it to the movement function
        self.process.set_min_box_size(value / (100))
Esempio n. 8
0
class Player(QMainWindow):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        self.setWindowTitle("Media Player")

        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.createUI()
        self.isPaused = False

    def createUI(self):
        """Set up the user interface, signals & slots
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin": # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer	
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor (QPalette.Window,
                               QColor(0,0,0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.positionslider = QSlider(Qt.Horizontal, self)
        self.positionslider.setToolTip("Position")
        self.positionslider.setMaximum(1000)
        self.positionslider.sliderMoved.connect(self.setPosition)

        self.hbuttonbox = QHBoxLayout()
        self.playbutton = QPushButton("Play")
        self.hbuttonbox.addWidget(self.playbutton)
        self.playbutton.clicked.connect(self.PlayPause)

        self.stopbutton = QPushButton("Stop")
        self.hbuttonbox.addWidget(self.stopbutton)
        self.stopbutton.clicked.connect(self.Stop)

        self.hbuttonbox.addStretch(1)
        self.volumeslider = QSlider(Qt.Horizontal, self)
        self.volumeslider.setMaximum(100)
        self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        self.volumeslider.setToolTip("Volume")
        self.hbuttonbox.addWidget(self.volumeslider)
        self.volumeslider.valueChanged.connect(self.setVolume)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addWidget(self.positionslider)
        self.vboxlayout.addLayout(self.hbuttonbox)

        self.widget.setLayout(self.vboxlayout)

        open = QAction("&Open", self)
        open.triggered.connect(self.OpenFile)
        exit = QAction("&Exit", self)
        exit.triggered.connect(sys.exit)
        menubar = self.menuBar()
        filemenu = menubar.addMenu("&File")
        filemenu.addAction(open)
        filemenu.addSeparator()
        filemenu.addAction(exit)

        self.timer = QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

    def PlayPause(self):
        """Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.playbutton.setText("Play")
            self.isPaused = True
        else:
            if self.mediaplayer.play() == -1:
                self.OpenFile()
                return
            self.mediaplayer.play()
            self.playbutton.setText("Pause")
            self.timer.start()
            self.isPaused = False

    def Stop(self):
        """Stop player
        """
        self.mediaplayer.stop()
        self.playbutton.setText("Play")

    def OpenFile(self, filename=None):
        """Open a media file in a MediaPlayer
        """
        if filename is None:
            filename = QFileDialog.getOpenFileName(self, "Open File", os.path.expanduser('~'))[0]
        if not filename:
            return

        # create the media
        if sys.version < '3':
            filename = unicode(filename)
        self.media = self.instance.media_new(filename)
        # put the media in the media player
        self.mediaplayer.set_media(self.media)

        # parse the metadata of the file
        self.media.parse()
        # set the title of the track as window title
        self.setWindowTitle(self.media.get_meta(0))

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have different functions for this
        if sys.platform.startswith('linux'): # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32": # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin": # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))
        self.PlayPause()

    def setVolume(self, Volume):
        """Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def setPosition(self, position):
        """Set the position
        """
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 1000.0)
        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)

    def updateUI(self):
        """updates the user interface"""
        # setting the slider to the desired position
        self.positionslider.setValue(self.mediaplayer.get_position() * 1000)

        if not self.mediaplayer.is_playing():
            # no need to call this function if nothing is played
            self.timer.stop()
            if not self.isPaused:
                # after the video finished, the play button stills shows
                # "Pause", not the desired behavior of a media player
                # this will fix it
                self.Stop()
Esempio n. 9
0
class Player(QWidget):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QWidget.__init__(self, master)
        #self.setWindowTitle("Media Player")

        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.createUI()
        self.isPaused = False

    def createUI(self):
        """Set up the user interface, signals & slots
        """
        #self.widget = QWidget(self)
        #self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        # self.positionslider = QSlider(Qt.Horizontal, self)
        # self.positionslider.setToolTip("Position")
        # self.positionslider.setMaximum(1000)
        # self.positionslider.sliderMoved.connect(self.setPosition)

        # self.hbuttonbox = QHBoxLayout()
        # self.playbutton = QPushButton("Play")
        # self.hbuttonbox.addWidget(self.playbutton)
        # self.playbutton.clicked.connect(self.PlayPause)

        # self.stopbutton = QPushButton("Stop")
        # self.hbuttonbox.addWidget(self.stopbutton)
        # self.stopbutton.clicked.connect(self.Stop)

        # self.hbuttonbox.addStretch(1)
        # self.volumeslider = QSlider(Qt.Horizontal, self)
        # self.volumeslider.setMaximum(100)
        # self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        # self.volumeslider.setToolTip("Volume")
        # self.hbuttonbox.addWidget(self.volumeslider)
        # self.volumeslider.valueChanged.connect(self.setVolume)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        #self.vboxlayout.addWidget(self.positionslider)
        #self.vboxlayout.addLayout(self.hbuttonbox)

        self.setLayout(self.vboxlayout)

        # open = QAction("&Open", self)
        # open.triggered.connect(self.OpenFile)
        # exit = QAction("&Exit", self)
        # exit.triggered.connect(sys.exit)
        #menubar = self.menuBar()
        #filemenu = menubar.addMenu("&File")
        #filemenu.addAction(open)
        #filemenu.addSeparator()
        #filemenu.addAction(exit)

        self.timer = QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

    def PlayPause(self):
        """Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            #self.playbutton.setText("Play")
            self.isPaused = True
        else:
            if self.mediaplayer.play() == -1:
                self.OpenFile()
                return
            self.mediaplayer.play()
            #self.playbutton.setText("Pause")
            self.timer.start()
            self.isPaused = False

    def Stop(self):
        """Stop player
        """
        self.mediaplayer.stop()
        #self.playbutton.setText("Play")

    def OpenFile(self, filename=None):
        """Open a media file in a MediaPlayer
        """
        if filename is None:
            filename = QFileDialog.getOpenFileName(self, "Open File",
                                                   os.path.expanduser('~'))[0]
        if not filename:
            return

        # create the media
        if sys.version < '3':
            filename = unicode(filename)
        self.media = self.instance.media_new(filename)
        # put the media in the media player
        self.mediaplayer.set_media(self.media)

        # parse the metadata of the file
        self.media.parse()
        # set the title of the track as window title
        self.setWindowTitle(self.media.get_meta(0))

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have different functions for this
        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))
        self.PlayPause()

    def setVolume(self, Volume):
        """Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def setPosition(self, position):
        """Set the position
        """
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 1000.0)
        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)

    def updateUI(self):
        """updates the user interface"""
        # setting the slider to the desired position
        #self.positionslider.setValue(self.mediaplayer.get_position() * 1000)

        if not self.mediaplayer.is_playing():
            # no need to call this function if nothing is played
            self.timer.stop()
            if not self.isPaused:
                # after the video finished, the play button stills shows
                # "Pause", not the desired behavior of a media player
                # this will fix it
                self.Stop()
Esempio n. 10
0
class obeeUi(QMainWindow):

    def __init__(self, master=None):
            QMainWindow.__init__(self, master)
            self.setWindowTitle("OBEE Control Center")

            # creating a basic vlc instance
            self.instance = VLC.Instance()
            # creating an empty vlc media player
            self.mediaplayer = self.instance.media_player_new()

            self.MainUi()
            ##self.MapLayer()
            self.temelmenubar()
            self.isPaused = False
            self.openQ()


    def MainUi(self):
        """
        Kullanıcı arayüz yapılandırması-sinyal/slot
        """
        #_translate = QtCore.QCoreApplication.translate
        self.Main_widget = QtWidgets.QWidget(self)
        self.palette = self.Main_widget.palette()
        self.palette.setColor (QPalette.Window,QColor(193,193,193))
        self.Main_widget.setPalette(self.palette)
        self.Main_widget.setAutoFillBackground(True)

        self.setObjectName("Main_widget")
        self.setCentralWidget(self.Main_widget)
        self.setWindowTitle("obee")

        #LOGO yu buraya koyduk
        self.label_logo = QtWidgets.QLabel(self.Main_widget)
        self.label_logo.setGeometry(QtCore.QRect(950, 600, 261, 91))
        self.label_logo.setText("")
        self.label_logo.setPixmap(QtGui.QPixmap("obee-logo.png"))
        self.label_logo.setObjectName("label_logo")
        self.label_logo.setCursor(QtGui.QCursor(QtCore.Qt.BlankCursor))
        self.label_logo.setMouseTracking(True)

        #1.KISIM-RSTPlayer
        self.videoframe = QFrame(self.Main_widget)
        self.videoframe.setGeometry(QtCore.QRect(0, 0, 900, 600))
        self.palette = self.videoframe.palette()
        self.palette.setColor (QPalette.Window,QColor(0,0,0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.RSTPbutton = QPushButton(self.Main_widget)#1.BUTON
        self.RSTPbutton.setGeometry(QtCore.QRect(0, 600, 50, 50))
        self.RSTPbutton.setText("RSTP")
        self.palette = self.RSTPbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(0,0,0))
        self.RSTPbutton.setPalette(self.palette)
        self.RSTPbutton.setAutoFillBackground(True)
        self.RSTPbutton.clicked.connect(self.Stream)
        self.RSTbutton = QPushButton(self.Main_widget)#2.BUTON
        self.RSTbutton.setGeometry(QtCore.QRect(50, 600, 50, 50))
        self.RSTbutton.setText("X")
        self.palette = self.RSTbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(255,255,255))
        self.RSTbutton.setPalette(self.palette)
        self.RSTbutton.setAutoFillBackground(True)
        self.RSbutton = QPushButton(self.Main_widget)#3.BUTON
        self.RSbutton.setGeometry(QtCore.QRect(0, 650, 50, 50))
        self.RSbutton.setText("Y")
        self.palette = self.RSTPbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(255,255,255))
        self.RSbutton.setPalette(self.palette)
        self.RSbutton.setAutoFillBackground(True)
        self.Rbutton = QPushButton(self.Main_widget)#4.BUTON
        self.Rbutton.setGeometry(QtCore.QRect(50, 650, 50, 50))
        self.Rbutton.setText("Z")
        self.palette = self.RSTPbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(255,255,255))
        self.Rbutton.setPalette(self.palette)
        self.Rbutton.setAutoFillBackground(True)#---
        self.f1button = QtWidgets.QPushButton(self.Main_widget)#1.BUTON
        self.f1button.setGeometry(QtCore.QRect(800, 600, 50, 50))
        self.f1button.setText("F1")
        self.f2button = QtWidgets.QPushButton(self.Main_widget)#2.BUTON
        self.f2button.setGeometry(QtCore.QRect(850, 600, 50, 50))
        self.f2button.setText("F2")
        self.f3button = QPushButton(self.Main_widget)#3.BUTON
        self.f3button.setGeometry(QtCore.QRect(800, 650, 50, 50))
        self.f3button.setText("F3")
        self.f4button = QPushButton(self.Main_widget)#4.BUTON
        self.f4button.setGeometry(QtCore.QRect(850, 650, 50, 50))
        self.f4button.setText("F4")

        self.f1button.clicked.connect(self.openQ)
        self.f2button.clicked.connect(self.fopenpre)
        #self.f3button.clicked.connect(self.fopendbupdate)
        self.f4button.clicked.connect(self.fopenhelp)

        #---info function button label---
        self.label_f1 = QtWidgets.QLabel(self.Main_widget)
        self.label_f1.setGeometry(QtCore.QRect(600, 585, 200, 50))
        self.label_f1.setText("*(F1)Quick Access Screen")
        self.label_f2 = QtWidgets.QLabel(self.Main_widget)
        self.label_f2.setGeometry(QtCore.QRect(600, 605, 200, 50))
        self.label_f2.setText("*(F2)Pre-paration DB")
        self.label_f3 = QtWidgets.QLabel(self.Main_widget)
        self.label_f3.setGeometry(QtCore.QRect(600, 625, 200, 50))
        self.label_f3.setText("*(F3)Database Update")
        self.label_f4 = QtWidgets.QLabel(self.Main_widget)
        self.label_f4.setGeometry(QtCore.QRect(600, 645, 200, 50))
        self.label_f4.setText("*(F4)-Help?")

        #2.KISIM-Map
        self.mapFrame = QFrame(self.Main_widget)
        self.mapFrame.setGeometry(QtCore.QRect(900, 0, 350, 450))
        self.palette = self.mapFrame.palette()
        self.palette.setColor (QPalette.Window,QColor(0,220,0))
        self.mapFrame.setPalette(self.palette)
        self.mapFrame.setAutoFillBackground(True)
        self.mapFrame.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
        self.label = QtWidgets.QLabel(self.mapFrame)
        self.label.setGeometry(QtCore.QRect(100, 20, 250, 21))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(85, 87, 83))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 87, 83))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(190, 190, 190))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label.setPalette(palette)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label.setText("BETA***")

        self.mapbutton = QPushButton(self.Main_widget)#1.BUTON
        self.mapbutton.setGeometry(QtCore.QRect(1250, 400, 50, 50))
        self.mapbutton.setText("MAP")
        self.mapbutton.setPalette(self.palette)
        self.mapbutton.clicked.connect(self.viewhtml)


        #3.KISIM-EVENTS
        self.eventFrame = QFrame(self.Main_widget)
        self.eventFrame.setGeometry(QtCore.QRect(900, 450, 350, 150))
        self.palette = self.mapFrame.palette()
        self.palette.setColor (QPalette.Window,QColor(220,0,0))
        self.eventFrame.setPalette(self.palette)
        self.eventFrame.setAutoFillBackground(True)

        self.events_textBrowser = QtWidgets.QTextBrowser(self.Main_widget)
        self.events_textBrowser.setGeometry(QtCore.QRect(910, 460, 330, 130))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(136, 138, 133))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(136, 138, 133))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(239, 235, 231))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        self.events_textBrowser.setPalette(palette)


        self.eventbutton = QPushButton(self.Main_widget)#1.BUTON
        self.eventbutton.setGeometry(QtCore.QRect(1250, 450, 50, 50))
        self.eventbutton.setText("EVENT")
        self.eventbutton.setPalette(self.palette)
        self.eventbutton.clicked.connect(self.Event)


        self.resize(1300, 900)
        self.show()


    def openQ(self):#yeni komut istemi
        if sys.platform == "linux": # for Linux
            os.system("gnome-terminal -e 'python3 startquick_basic.py'")
        elif sys.platform == "win32": # for Windows
            os.system("start cmd /c 'python3 startquick_basic.py'")

    def fopenpre(self):
        import sqlite3
        # SQLite DB Name
        DB_Name =  "dbMQTT.db"

        # SQLite DB Table Schema
        TableSchema="""
        drop table if exists Weather_Data ;
        create table weather (
          _id_ integer primary key autoincrement,
          ID text,
          Date_n_Time text,
          weather_value text
        );


        drop table if exists Sensor_Data ;
        create table sensor (
          _id_ integer primary key autoincrement,
          ID text,
          Date_n_Time text,
          Sensor_value text
        );


        drop table if exists Location_Data ;
        create table location (
          loc text
        );
        """

        #Connect or Create DB File
        conn = sqlite3.connect(DB_Name)
        curs = conn.cursor()

        #Create Tables
        sqlite3.complete_statement(TableSchema)
        curs.executescript(TableSchema)

        #Close DB
        curs.close()
        conn.close()

        QMessageBox.about(self.Main_widget, str("Complete"), str("Database created//but(for error) you should delete or replace old database file"))

    def fopenhelp(self):
        """import webbrowser
        self.pre..()
        webbrowser.open('help.html')"""

    def MQTTlayersetupUi(self):
        self.MQTTsetup = QtWidgets.QWidget(self)
        self.setCentralWidget(self.MQTTsetup)
        self.MQTTsetup.setObjectName("MQTTsetup")
        #Objeleri yerleştirelim
        ###1.KISIM###
        self.groupBox = QtWidgets.QGroupBox(self.MQTTsetup)
        self.palette = self.groupBox.palette()
        self.palette.setColor (QPalette.Window,QColor(143,143,143))
        self.groupBox.setPalette(self.palette)
        self.groupBox.setAutoFillBackground(True)
        self.groupBox.setGeometry(QtCore.QRect(10, 10, 511, 71))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.groupBox.setFont(font)
        self.groupBox.setObjectName("groupBox")

        self.label_info = QtWidgets.QLabel(self.groupBox)
        self.label_info.setGeometry(QtCore.QRect(77, 50, 282, 20))
        font = QtGui.QFont()
        font.setPointSize(7)
        font.setItalic(True)
        self.label_info.setFont(font)
        self.label_info.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.label_info.setObjectName("label_info")

        self.verticalLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(430, 10, 81, 61))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.Connect_pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.Connect_pushButton.setObjectName("Connect_pushButton")
        self.Connect_pushButton.clicked.connect(self.MQTTclient)
        self.verticalLayout.addWidget(self.Connect_pushButton)
        self.Disconnect_pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.Disconnect_pushButton.setObjectName("Disconnect_pushButton")
        #self.Disconnect_pushButton.clicked.connect(self.MQTTstop)
        self.verticalLayout.addWidget(self.Disconnect_pushButton)
        self.formLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.formLayoutWidget.setGeometry(QtCore.QRect(0, 20, 261, 22))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout_host = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout_host.setContentsMargins(0, 0, 0, 0)
        self.formLayout_host.setObjectName("formLayout_host")
        self.connectionsetup_host_label = QtWidgets.QLabel(self.formLayoutWidget)
        self.connectionsetup_host_label.setObjectName("connectionsetup_host_label")
        self.formLayout_host.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.connectionsetup_host_label)
        self.Host_linedit = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.Host_linedit.setObjectName("Host_linedit")
        self.formLayout_host.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.Host_linedit)
        self.formLayoutWidget_2 = QtWidgets.QWidget(self.groupBox)
        self.formLayoutWidget_2.setGeometry(QtCore.QRect(270, 20, 141, 21))
        self.formLayoutWidget_2.setObjectName("formLayoutWidget_2")
        self.formLayout_port = QtWidgets.QFormLayout(self.formLayoutWidget_2)
        self.formLayout_port.setContentsMargins(0, 0, 0, 0)
        self.formLayout_port.setObjectName("formLayout_port")
        self.Port_linedit = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.Port_linedit.setObjectName("Port_linedit")
        self.formLayout_port.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.Port_linedit)
        self.connectionsetup_port_label = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.connectionsetup_port_label.setObjectName("connectionsetup_port_label")
        self.formLayout_port.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.connectionsetup_port_label)
        ###2.KISIM###
        self.tabWidget = QtWidgets.QTabWidget(self.MQTTsetup)
        self.tabWidget.setGeometry(QtCore.QRect(10, 100, 241, 201))
        self.tabWidget.setObjectName("tabWidget")
        self.tab_sekme_pub = QtWidgets.QWidget()###SEKME Publish
        self.palette = self.tab_sekme_pub.palette()
        self.palette.setColor (QPalette.Window,QColor(0,100,10))
        self.tab_sekme_pub.setPalette(self.palette)
        self.tab_sekme_pub.setAutoFillBackground(True)
        self.tab_sekme_pub.setObjectName("tab_sekme_pub")
        self.publish_linedit = QtWidgets.QLineEdit(self.tab_sekme_pub)
        self.publish_linedit.setEnabled(True)
        self.publish_linedit.setGeometry(QtCore.QRect(10, 10, 191, 20))
        self.publish_linedit.setWhatsThis("")
        self.publish_linedit.setAccessibleDescription("")
        self.publish_linedit.setInputMask("")
        self.publish_linedit.setClearButtonEnabled(False)
        self.publish_linedit.setObjectName("publish_linedit")
        self.listWidget = QtWidgets.QListWidget(self.tab_sekme_pub)
        self.listWidget.setGeometry(QtCore.QRect(10, 40, 121, 121))
        self.listWidget.setObjectName("listWidget")
        item = QtWidgets.QListWidgetItem()
        self.listWidget.addItem(item)
        item = QtWidgets.QListWidgetItem()
        self.listWidget.addItem(item)
        item = QtWidgets.QListWidgetItem()
        self.listWidget.addItem(item)
        self.formLayoutWidget_3 = QtWidgets.QWidget(self.tab_sekme_pub)
        self.formLayoutWidget_3.setGeometry(QtCore.QRect(130, 40, 83, 61))
        self.formLayoutWidget_3.setObjectName("formLayoutWidget_3")
        self.formLayout_pub = QtWidgets.QFormLayout(self.formLayoutWidget_3)
        self.formLayout_pub.setContentsMargins(0, 0, 0, 0)
        self.formLayout_pub.setObjectName("formLayout_pub")
        self.publish_add_pushButton = QtWidgets.QPushButton(self.formLayoutWidget_3)
        self.publish_add_pushButton.setObjectName("publish_add_pushButton")
        self.formLayout_pub.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.publish_add_pushButton)
        self.publish_remove_pushButton = QtWidgets.QPushButton(self.formLayoutWidget_3)
        self.publish_remove_pushButton.setObjectName("publish_remove_pushButton")
        self.formLayout_pub.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.publish_remove_pushButton)
        self.tabWidget.addTab(self.tab_sekme_pub, "")
        self.tab_sekme_sub = QtWidgets.QWidget()###SEKME Subscribe#yerdeğisti!!!pub-*sub-düzenlenmedi
        self.palette = self.tab_sekme_sub.palette()
        self.palette.setColor (QPalette.Window,QColor(0,10,110))
        self.tab_sekme_sub.setPalette(self.palette)
        self.tab_sekme_sub.setAutoFillBackground(True)
        self.tab_sekme_sub.setObjectName("tab_sekme_sub")
        self.subscribe_linedit = QtWidgets.QLineEdit(self.tab_sekme_sub)
        self.subscribe_linedit.setGeometry(QtCore.QRect(10, 10, 191, 20))
        self.subscribe_linedit.setObjectName("subscribe_linedit")
        self.formLayoutWidget_4 = QtWidgets.QWidget(self.tab_sekme_sub)
        self.formLayoutWidget_4.setGeometry(QtCore.QRect(130, 40, 83, 61))
        self.formLayoutWidget_4.setObjectName("formLayoutWidget_4")
        self.formLayout_sub = QtWidgets.QFormLayout(self.formLayoutWidget_4)
        self.formLayout_sub.setContentsMargins(0, 0, 0, 0)
        self.formLayout_sub.setObjectName("formLayout_sub")
        self.subscribe_add_pushButton = QtWidgets.QPushButton(self.formLayoutWidget_4)
        self.subscribe_add_pushButton.setObjectName("subscribe_add_pushButton")
        self.formLayout_sub.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.subscribe_add_pushButton)
        self.subscribe_remove_pushButton = QtWidgets.QPushButton(self.formLayoutWidget_4)
        self.subscribe_remove_pushButton.setObjectName("subscribe_remove_pushButton")
        self.formLayout_sub.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.subscribe_remove_pushButton)
        self.listWidget_2 = QtWidgets.QListWidget(self.tab_sekme_sub)
        self.listWidget_2.setGeometry(QtCore.QRect(10, 40, 121, 121))
        self.listWidget_2.setObjectName("listWidget_2")
        item = QtWidgets.QListWidgetItem()
        self.listWidget_2.addItem(item)
        item = QtWidgets.QListWidgetItem()
        self.listWidget_2.addItem(item)
        #self.tabWidget.addTab(self.tab_sekme_sub, "")  ----Sekme pasif

        ###3.KISIM###
        self.groupBox_events = QtWidgets.QGroupBox(self.MQTTsetup)
        self.groupBox_events.setGeometry(QtCore.QRect(280, 110, 240, 190))
        self.groupBox_events.setObjectName("groupBox_events")
        self.palette = self.groupBox_events.palette()
        self.palette.setColor (QPalette.Window,QColor(222,0,0))
        self.groupBox_events.setPalette(self.palette)
        self.groupBox_events.setAutoFillBackground(True)
        self.events_textBrowser = QtWidgets.QTextBrowser(self.groupBox_events)
        self.events_textBrowser.setGeometry(QtCore.QRect(10, 20, 220, 160))
        self.events_textBrowser.setObjectName("events_textBrowser")

        self.tabWidget.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(self.MQTTsetup)

        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("MQTTsetup", "MQTT Setup"))
        self.groupBox.setTitle(_translate("MQTTsetup", "CONNECTION SETUP"))
        self.label_info.setText(_translate("MQTTsetup","*Only need to press the connect button using the predefined settings*"))
        self.Connect_pushButton.setText(_translate("MQTTsetup", "Connect"))
        self.Disconnect_pushButton.setText(_translate("MQTTsetup", "Disconnect"))
        self.connectionsetup_host_label.setText(_translate("MQTTsetup", "Broker IP"))
        self.connectionsetup_port_label.setText(_translate("MQTTsetup", "PORT"))
        __sortingEnabled = self.listWidget.isSortingEnabled()
        self.listWidget.setSortingEnabled(False)
        item = self.listWidget.item(0)
        item.setText(_translate("MQTTsetup", "sensor"))
        item = self.listWidget.item(1)
        item.setText(_translate("MQTTsetup", "location"))
        item = self.listWidget.item(2)
        item.setText(_translate("MQTTsetup", "weather"))
        self.listWidget.setSortingEnabled(__sortingEnabled)
        self.publish_add_pushButton.setText(_translate("MQTTsetup", "OK"))
        self.publish_remove_pushButton.setText(_translate("MQTTsetup", "Remove"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sekme_pub), _translate("MQTTsetup", "SUBSCRIBE"))
        self.subscribe_add_pushButton.setText(_translate("MQTTsetup", "OK"))
        self.subscribe_remove_pushButton.setText(_translate("MQTTsetup", "Remove"))
        __sortingEnabled = self.listWidget_2.isSortingEnabled()
        self.listWidget_2.setSortingEnabled(False)
        item = self.listWidget_2.item(0)
        item.setText(_translate("MQTTsetup", "empty0"))
        item = self.listWidget_2.item(1)
        item.setText(_translate("MQTTsetup", "empty1"))
        self.listWidget_2.setSortingEnabled(__sortingEnabled)
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sekme_sub), _translate("MQTTsetup", "PUBLISH"))
        self.groupBox_events.setTitle(_translate("MQTTsetup", "EVENTS"))

        self.resize(540, 350)
        self.show()

    def MQTTclient(self, MQTTlayersetupUi):
        if sys.platform == "linux": # for Linux
            os.system("gnome-terminal -e 'python3 MQTTgui.py'")
        elif sys.platform == "win32": # for Windows
            os.system("start cmd /c 'python3 MQTTgui.py'")

    def RSTPlayersetupUi(self):
        """
        Kullanıcı arayüz yapılandırması-RSTPlayer ve sinyal/slot
        """
        self.RSTPlayer_widget = QtWidgets.QWidget(self)
        self.setCentralWidget(self.RSTPlayer_widget)
        self.setWindowTitle("Stream")

        self.videoframe = QFrame()          #videoframe oluşturduk widget içine alacaz sonra
        self.palette = self.videoframe.palette()
        self.palette.setColor (QPalette.Window,QColor(0,0,0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)
        self.videoframe.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))

        self.hbuttonbox = QHBoxLayout(self)                 #butonlar oluşturuyoruz
        self.streambutton = QPushButton("Launch Stream")  #
        self.hbuttonbox.addWidget(self.streambutton)        #
        self.streambutton.clicked.connect(self.Stream)      #

        self.stopbutton = QPushButton("Stop")               #
        self.hbuttonbox.addWidget(self.stopbutton)          #
        self.stopbutton.clicked.connect(self.Stop)          #

        self.vboxlayout = QVBoxLayout(self)             #Ana pencereye yerleştirmek için
                                                    #vboxlayout tanımladık ve sonra kullandık
        self.vboxlayout.addWidget(self.videoframe)  #VideoFrame ana pencereye eklendi
        self.vboxlayout.addLayout(self.hbuttonbox)  #hbuttonbox ana pencereye eklendi
        #vboxlayout içine koyduk şimdi bunları RSTPlayer_widget'a
        self.RSTPlayer_widget.setLayout(self.vboxlayout)   #dikkat en son rstpwidget a ekledi,RSTPlayer_widget ayarlandı
        #yani enson çuvala koyduk

        self.resize(640, 480)
        self.show()

    def MapLayer(self):
        self.MapLayer_widget = QtWidgets.QWidget(self)
        self.setCentralWidget(self.MapLayer_widget)
        self.setWindowTitle("MAP")

        self.mapFrame = QFrame(self.MapLayer_widget)
        self.mapFrame.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
        self.mapFrame.setGeometry(QtCore.QRect(10, 10, 500, 500))
        self.palette = self.mapFrame.palette()
        self.palette.setColor (QPalette.Window,QColor(0,220,0))
        self.mapFrame.setPalette(self.palette)
        self.mapFrame.setAutoFillBackground(True)
        self.label = QtWidgets.QLabel(self.mapFrame)
        self.label.setGeometry(QtCore.QRect(100, 20, 250, 50))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(85, 87, 83))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 87, 83))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(190, 190, 190))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label.setPalette(palette)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label.setText("BETA***")

        self.MAPbutton = QPushButton(self.MapLayer_widget)#1.BUTON
        self.MAPbutton.setGeometry(QtCore.QRect(250, 510, 50, 50))
        self.MAPbutton.setText("OK")
        self.palette = self.MAPbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(0,220,0))
        self.MAPbutton.setPalette(self.palette)
        self.MAPbutton.setAutoFillBackground(True)
        #self.MAPbutton.clicked.connect(self.)
        self.Xbutton = QPushButton(self.MapLayer_widget)#2.BUTON
        self.Xbutton.setGeometry(QtCore.QRect(200, 510, 50, 50))
        self.Xbutton.setText("X")
        self.palette = self.Xbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(0,220,0))
        self.Xbutton.setPalette(self.palette)
        self.Xbutton.setAutoFillBackground(True)
        self.Ybutton = QPushButton(self.MapLayer_widget)#3.BUTON
        self.Ybutton.setGeometry(QtCore.QRect(250, 560, 50, 50))
        self.Ybutton.setText("Y")
        self.palette = self.Ybutton.palette()
        self.palette.setColor (QPalette.Window,QColor(0,220,0))
        self.Ybutton.setPalette(self.palette)
        self.Ybutton.setAutoFillBackground(True)
        self.Zbutton = QPushButton(self.MapLayer_widget)#4.BUTON
        self.Zbutton.setGeometry(QtCore.QRect(200, 560, 50, 50))
        self.Zbutton.setText("Z")
        self.palette = self.Zbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(0,220,0))
        self.Zbutton.setPalette(self.palette)
        self.Zbutton.setAutoFillBackground(True)#---

        #self.map = QWebView(self)
        #self.openMap = QUrl("http://thomasmansencal.com/Sharing/Others/Google_Maps.html")
		#self.map.load( openMap )
        #self.MapLayer_widget.addWidget( map )

        self.resize(520, 610)
        self.show()

    def premaps(self):
        import sqlite3
        import json
        import codecs

        conn = sqlite3.connect('dbMQTT.db')
        cur = conn.cursor()

        fhand = codecs.open('where.js','w', "utf-8")
        fhand.write("myData = [\n")
        count = 0

        cur.execute('SELECT * FROM location')
        for row in cur :

            loc = str(row[0])#0. sutunu okuduk
            if loc == 0 : continue
            try :
                print(loc)

                count = count + 1
                if count > 1 : fhand.write(",\n")
                output = "["+str(loc)+"]"
                fhand.write(output)
            except:
                continue

        fhand.write("\n];\n")
        cur.close()
        fhand.close()

    def viewhtml(self):
        import webbrowser
        self.premaps()
        webbrowser.open('where.html')

    def temelmenubar(self):
        """
        Ana ekran menü bar yapılandırılması
        """
        setRSTP = QAction("Setup", self)
        setRSTP.triggered.connect(self.Stream)
        onlyRSTP = QAction("View", self)
        onlyRSTP.triggered.connect(self.RSTPlayersetupUi)

        setMQTT = QAction("Setup", self)
        setMQTT.triggered.connect(self.MQTTlayersetupUi)
        #onlyMQTT = QAction("View", self)
        onlyMQTTsub = QAction("Subscribe", self)
        onlyMQTTpub = QAction("", self)


        setMap = QAction("Setup", self)
        setMap.triggered.connect(self.MapLayer)
        onlyMap = QAction("View", self)
        onlyMap.triggered.connect(self.MapLayer)

        home = QAction("Main Page", self)
        home.triggered.connect(self.MainUi)
        exit = QAction("Exit", self)
        exit.triggered.connect(sys.exit)

        version = QAction("v1.1-beta", self)


        OBEEmenubar = self.menuBar()            #Temel menübar oluşturduk
        General = OBEEmenubar.addMenu("General")
        General.addAction(home)
        General.addSeparator()
        General.addAction(exit)

        RSTPlayermenu = OBEEmenubar.addMenu("RSTP")
        aRSTPmenu = RSTPlayermenu.addAction(onlyRSTP)
        bRSTPmenu = RSTPlayermenu.addAction(setRSTP)

        MQTTlayermenu = OBEEmenubar.addMenu("MQTT")
        aMQTTmenu = MQTTlayermenu.addMenu("View")
        bMQTTmenu = MQTTlayermenu.addAction(setMQTT)
        aaMQTTmenu = aMQTTmenu.addAction(onlyMQTTsub)
        abMQTTmenu = aMQTTmenu.addAction(onlyMQTTpub)

        MapLayermenu = OBEEmenubar.addMenu("Map")
        MapLayermenu.addAction(onlyMap)
        MapLayermenu.addAction(setMap)

        About = OBEEmenubar.addMenu("About")
        About.addAction(version)

    def Stream(self, streambutton):
        """
        play/pause geçiş yapılandırması
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.streambutton.setText("Live")
            self.isPaused = True

        else:
            if self.mediaplayer.play() == -1:
                self.OpenFile()
                return
            self.mediaplayer.play()
            self.streambutton.setText("Pause")
            self.isPaused = False

    def Stop(self):#stop yapılandırması
        self.mediaplayer.stop()
        self.streambutton.setText("BROADCASTING")

    def OpenFile(self,filename=None):
        """
        Yürütülen media yapılandırması
        """
        if filename is None:
            filename = QFileDialog.getOpenFileName(self, "Dosya Seç", os.path.expanduser('~'))[0]
        if not filename:
            return

        # media oluşturuyoruz
        if sys.version < '3':
            filename = unicode(filename)
        self.media = self.instance.media_new(filename)
        # MediaPlayer içine koyalım
        self.mediaplayer.set_media(self.media)

        # Dosyamızın metadata verilerini ayrıştıyoruz
        self.media.parse()

        """
            MediaPlayer QFrame ye bağlı olması gerekiyor:
            Bu durum OS tipine göre değişkenlik göstereceğinden;
            ilgili komutları oluşturuyoruz:)
            Bu olmazsa player katmanı ana pencerede olmuyor:( *5 satır*
        """
        if sys.platform.startswith('linux'): # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32": # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        self.Stream()

    def Event(self):#düzenlenecek
        self.Events_widget = QtWidgets.QWidget(self)
        self.setWindowTitle("Events")

        self.eventsFrame = QFrame(self.Events_widget)
        self.eventsFrame.setGeometry(QtCore.QRect(0, 0, 600, 600))
        self.palette = self.eventFrame.palette()
        self.palette.setColor (QPalette.Window,QColor(0,0,0))
        self.eventsFrame.setPalette(self.palette)
        self.eventsFrame.setAutoFillBackground(True)

        self.eventss_textBrowser = QtWidgets.QTextBrowser(self.Events_widget)
        self.eventss_textBrowser.setGeometry(QtCore.QRect(10, 20, 580, 600))

        self.eventsbutton = QPushButton(self.Events_widget)#1.BUTON
        self.eventsbutton.setGeometry(QtCore.QRect(510, 20, 50, 50))
        self.eventsbutton.setText("Events")
        self.palette = self.eventsbutton.palette()
        self.palette.setColor (QPalette.Window,QColor(220,0,0))
        self.eventsbutton.setPalette(self.palette)
        self.eventsbutton.setAutoFillBackground(True)
        #self.eventbutton.clicked.connect(self.Stream)

        self.resize(600, 700)
        self.show()
Esempio n. 11
0
class RSTPlayer(QMainWindow):
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        self.setWindowTitle("RSTP Real-Time Streaming Screen")

        self.instance = VLC.Instance()
        self.mediaplayer = self.instance.media_player_new()

        self.RSTPgui()
        self.isPaused = False

    def RSTPgui(self):
        """
        Kullanıcı arayüz yapılandırması-RSTPlayer ve sinyal/slot
        """
        self.RSTPlayer_widget = QtWidgets.QWidget(self)
        self.setCentralWidget(self.RSTPlayer_widget)
        self.setWindowTitle("Stream")

        self.videoframe = QFrame(
        )  #videoframe oluşturduk widget içine alacaz sonra
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)
        self.videoframe.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))

        self.hbuttonbox = QHBoxLayout(self)  #butonlar oluşturuyoruz
        self.streambutton = QPushButton("Launch Stream")  #
        self.hbuttonbox.addWidget(self.streambutton)  #
        self.streambutton.clicked.connect(self.Stream)  #

        self.stopbutton = QPushButton("Stop")  #
        self.hbuttonbox.addWidget(self.stopbutton)  #
        self.stopbutton.clicked.connect(self.Stop)  #

        self.vboxlayout = QVBoxLayout(self)  #Ana pencereye yerleştirmek için
        #vboxlayout tanımladık ve sonra kullandık
        self.vboxlayout.addWidget(
            self.videoframe)  #VideoFrame ana pencereye eklendi
        self.vboxlayout.addLayout(
            self.hbuttonbox)  #hbuttonbox ana pencereye eklendi
        #vboxlayout içine koyduk şimdi bunları RSTPlayer_widget'a
        self.RSTPlayer_widget.setLayout(
            self.vboxlayout
        )  #dikkat en son rstpwidget a ekledi,RSTPlayer_widget ayarlandı
        #yani enson çuvala koyduk

        self.resize(640, 480)
        self.show()

    def Stream(self, streambutton):
        """
        play/pause geçiş yapılandırması
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.streambutton.setText("Live")
            self.isPaused = True

        else:
            if self.mediaplayer.play() == -1:
                self.OpenFile()
                return
            self.mediaplayer.play()
            self.streambutton.setText("Pause")
            self.isPaused = False

    def Stop(self):  #stop yapılandırması
        self.mediaplayer.stop()
        self.streambutton.setText("BROADCASTING")

    def OpenFile(self, filename=None):
        """
        Yürütülen media yapılandırması
        """
        if filename is None:
            filename = QFileDialog.getOpenFileName(self, "Dosya Seç",
                                                   os.path.expanduser('~'))[0]
        if not filename:
            return

        # media oluşturuyoruz
        if sys.version < '3':
            filename = unicode(filename)
        self.media = self.instance.media_new(filename)
        # MediaPlayer içine koyalım
        self.mediaplayer.set_media(self.media)

        # Dosyamızın metadata verilerini ayrıştıyoruz
        self.media.parse()
        """
            MediaPlayer QFrame ye bağlı olması gerekiyor:
            Bu durum OS tipine göre değişkenlik göstereceğinden;
            ilgili komutları oluşturuyoruz:)
            Bu olmazsa player katmanı ana pencerede olmuyor:( *5 satır*
        """
        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        self.Stream()
Esempio n. 12
0
class OtherDialog(QDialog):
    def __init__(self, inputDict):
        super(OtherDialog, self).__init__()

        self.setWindowTitle('Other configurations')

        mltpl = inputDict['multiple']
        thrshld = inputDict['threshold']
        msk = inputDict['mask']

        vbox = QVBoxLayout()
        self.setLayout(vbox)

        label = QLabel("(*) Only meant for image inserted by template")
        vbox.addWidget(label)

        hline = QFrame()
        hline.setFrameStyle(hline.HLine)
        hline.setLineWidth(1)
        vbox.addWidget(hline)

        formLayout = QFormLayout()
        vbox.addLayout(formLayout)

        self.multiple = QCheckBox()
        self.multiple.setChecked(mltpl)
        formLayout.addRow("Multiple Match (*):", self.multiple)

        self.threshold = QDoubleSpinBox()
        self.threshold.setDecimals(1)
        self.threshold.setRange(0, 1)
        self.threshold.setSingleStep(0.1)
        self.threshold.setValue(thrshld)
        formLayout.addRow("Threshold (*):", self.threshold)

        hbox = QHBoxLayout()

        colorBtn = QPushButton("Select")
        colorBtn.clicked.connect(self.colorBtn_clicked)
        hbox.addWidget(colorBtn)

        _, red, _, green, _, blue = msk.split(',')
        self.backgroundColor = ("background-color: rgb(" + red + "," + green +
                                "," + blue + ")")
        self.borderColor = "border: 1px solid black"

        self.frame = QFrame()
        self.frame.setStyleSheet(self.borderColor + ";" + self.backgroundColor)
        hbox.addWidget(self.frame)

        formLayout.addRow("Image background color:", hbox)

        self.btns = QDialogButtonBox()
        self.btns.setStandardButtons(QDialogButtonBox.Cancel
                                     | QDialogButtonBox.Ok)
        vbox.addWidget(self.btns)

        self.btns.accepted.connect(self.accept)
        self.btns.rejected.connect(self.reject)

    def colorBtn_clicked(self):

        colorDialog = QColorDialog()
        colorDialog.setOption(QColorDialog.ShowAlphaChannel)
        color = colorDialog.getColor()

        if color.isValid():
            self.frame.setStyleSheet(self.borderColor + ";" +
                                     'background-color: %s' % color.name())
        return

    def getMask(self):
        ''' Get the background color of the frame. '''

        # Get the background color of the frame
        frameColor = self.frame.palette().color(QPalette.Background)
        red, green, blue, alpha = (frameColor.red(), frameColor.green(),
                                   frameColor.blue(), frameColor.alpha())

        # Create a mask list
        maskList = []
        for c in red, green, blue:
            if int(c) == 0:
                maskList.append(str(c))
                maskList.append(str(int(c) + 2))
            elif int(c) == 255:
                maskList.append(str(int(c) - 2))
                maskList.append(str(c))
            else:
                maskList.append(str(int(c) - 1))
                maskList.append(str(int(c) + 1))
        # Join the list with comma
        mask = ','.join(maskList)

        return mask

    def accept(self):

        mask = self.getMask()

        # Create an empty dictionary
        self._output = {}

        # Fill the dictionary with values
        self._output['multiple'] = self.multiple.isChecked()
        self._output['threshold'] = self.threshold.value()
        self._output['mask'] = mask

        super(OtherDialog, self).accept()
        return

    def get_output(self):
        return self._output
Esempio n. 13
0
def main():
    MAX_INTENSITY = 255

    app = QApplication([])

    # Create and lay out widgets.

    redLabel = QLabel('Red:')
    redLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
    redLabel.setAutoFillBackground(True)
    p = redLabel.palette()
    p.setColor(redLabel.backgroundRole(), Qt.red)
    redLabel.setPalette(p)

    greenLabel = QLabel('Green:')
    greenLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
    greenLabel.setAutoFillBackground(True)
    p = greenLabel.palette()
    p.setColor(greenLabel.backgroundRole(), Qt.green)
    greenLabel.setPalette(p)

    blueLabel = QLabel('Blue:')
    blueLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
    blueLabel.setAutoFillBackground(True)
    p = blueLabel.palette()
    p.setColor(blueLabel.backgroundRole(), Qt.blue)
    blueLabel.setPalette(p)

    redSlider = QSlider(Qt.Horizontal)
    redSlider.setMinimum(0)
    redSlider.setMaximum(MAX_INTENSITY)

    greenSlider = QSlider(Qt.Horizontal)
    greenSlider.setMinimum(0)
    greenSlider.setMaximum(MAX_INTENSITY)

    blueSlider = QSlider(Qt.Horizontal)
    blueSlider.setMinimum(0)
    blueSlider.setMaximum(MAX_INTENSITY)

    redLineEdit = QLineEdit('0')
    greenLineEdit = QLineEdit('0')
    blueLineEdit = QLineEdit('0')

    controlFrameLayout = QGridLayout()
    controlFrameLayout.setSpacing(0)
    controlFrameLayout.setContentsMargins(0, 0, 0, 0)
    controlFrameLayout.setRowStretch(0, 0)
    controlFrameLayout.setRowStretch(1, 0)
    controlFrameLayout.setRowStretch(2, 0)
    controlFrameLayout.setColumnStretch(0, 0)
    controlFrameLayout.setColumnStretch(1, 1)
    controlFrameLayout.setColumnStretch(2, 0)
    controlFrameLayout.addWidget(redLabel, 0, 0)
    controlFrameLayout.addWidget(greenLabel, 1, 0)
    controlFrameLayout.addWidget(blueLabel, 2, 0)
    controlFrameLayout.addWidget(redSlider, 0, 1)
    controlFrameLayout.addWidget(greenSlider, 1, 1)
    controlFrameLayout.addWidget(blueSlider, 2, 1)
    controlFrameLayout.addWidget(redLineEdit, 0, 2)
    controlFrameLayout.addWidget(greenLineEdit, 1, 2)
    controlFrameLayout.addWidget(blueLineEdit, 2, 2)
    controlFrame = QFrame()
    controlFrame.setLayout(controlFrameLayout)

    colorFrame = QFrame()
    colorFrame.setAutoFillBackground(True)
    p = colorFrame.palette()
    p.setColor(colorFrame.backgroundRole(), Qt.black)
    colorFrame.setPalette(p)

    centralFrameLayout = QGridLayout()
    centralFrameLayout.setSpacing(0)
    centralFrameLayout.setContentsMargins(0, 0, 0, 0)
    centralFrameLayout.setRowStretch(0, 1)
    centralFrameLayout.setRowStretch(1, 0)
    centralFrameLayout.setColumnStretch(0, 1)
    centralFrameLayout.addWidget(colorFrame, 0, 0)
    centralFrameLayout.addWidget(controlFrame, 1, 0)
    centralFrame = QFrame()
    centralFrame.setLayout(centralFrameLayout)

    window = QMainWindow()
    window.setWindowTitle('Color Displayer')
    window.setCentralWidget(centralFrame)
    screenSize = QDesktopWidget().screenGeometry()
    window.resize(screenSize.width() // 2, screenSize.height() // 2)

    # Handle events for the QSlider objects.

    def sliderSlot():
        r = redSlider.value()
        g = greenSlider.value()
        b = blueSlider.value()
        redLineEdit.setText(str(r))
        greenLineEdit.setText(str(g))
        blueLineEdit.setText(str(b))
        p = colorFrame.palette()
        p.setColor(colorFrame.backgroundRole(), QColor(r, g, b))
        colorFrame.setPalette(p)

    redSlider.valueChanged.connect(sliderSlot)
    greenSlider.valueChanged.connect(sliderSlot)
    blueSlider.valueChanged.connect(sliderSlot)

    # Handle events for the LineEdit objects.

    def lineEditSlot():
        try:
            r = int(redLineEdit.text())
            g = int(greenLineEdit.text())
            b = int(blueLineEdit.text())
            if (r < 0) or (r > MAX_INTENSITY): raise Exception()
            if (g < 0) or (g > MAX_INTENSITY): raise Exception()
            if (b < 0) or (b > MAX_INTENSITY): raise Exception()
            redSlider.setValue(r)
            greenSlider.setValue(g)
            blueSlider.setValue(b)
            p = colorFrame.palette()
            p.setColor(colorFrame.backgroundRole(), QColor(r, g, b))
            colorFrame.setPalette(p)
        except:
            # Use the Slider objects to restore the LineEdit objects.
            redLineEdit.setText(str(redSlider.value()))
            greenLineEdit.setText(str(greenSlider.value()))
            blueLineEdit.setText(str(blueSlider.value()))

    redLineEdit.returnPressed.connect(lineEditSlot)
    greenLineEdit.returnPressed.connect(lineEditSlot)
    blueLineEdit.returnPressed.connect(lineEditSlot)

    window.show()
    exit(app.exec_())
Esempio n. 14
0
class MovieLayout(QWidget):
    def __init__(self, url, movieID, user):
        super().__init__()
        self.controller = MovieController(url)
        self.url = url
        self.user = user
        self.setWindowTitle("Movie Player")
        self.movieID = movieID
        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()
        self.isPaused = True

        #        self.moviebox = QVBoxLayout()
        #        self.moviebox.addWidget(self.widget)
        #        self.widget.setLayout(self.moviebox)
        #        print("here")

        self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.positionslider = QSlider(Qt.Horizontal, self)
        self.positionslider.setToolTip("Position")
        self.positionslider.setMaximum(1000)
        self.positionslider.sliderMoved.connect(self.setPosition)

        self.hbuttonbox = QHBoxLayout()
        self.playbutton = QPushButton()
        self.playbutton.setObjectName("playbutton")
        self.hbuttonbox.addWidget(self.playbutton)

        result = self.controller.isMovieForUser(self.movieID, self.user.id)
        self.stopbutton = QPushButton()
        self.stopbutton.setObjectName("stopbutton")
        self.hbuttonbox.addWidget(self.stopbutton)

        if (isinstance(self.user, Professor) == True and len(result) > 0):
            self.numberofViews = result[0][1]
            self.description = result[0][0]
            self.numofLikes = result[0][2]
            self.infoButton = QPushButton("Statistics")
            self.hbuttonbox.addWidget(self.infoButton)
            self.infoButton.clicked.connect(lambda: self.openStats())

        self.stopbutton.clicked.connect(self.Stop)

        self.hbuttonbox.addStretch(1)
        self.volumeslider = QSlider(Qt.Horizontal, self)
        self.volumeslider.setMaximum(100)
        self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        self.volumeslider.setToolTip("Volume")
        self.hbuttonbox.addWidget(self.volumeslider)
        self.volumeslider.valueChanged.connect(self.setVolume)

        self.vboxlayout = QVBoxLayout()

        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addWidget(self.positionslider)
        self.vboxlayout.addLayout(self.hbuttonbox)

        status = self.controller.getLikeStatus(self.movieID, self.user.id)
        if (status == 0):
            self.likeButton = QPushButton("Like")
        else:
            self.likeButton = QPushButton("DisLike")

        self.likeButton.clicked.connect(lambda: self.LikeDislike())
        self.comment = QPlainTextEdit()
        self.likehbox = QHBoxLayout()
        self.comment.setPlaceholderText("Type Comment Here ...")
        self.comment.setObjectName("comment")
        self.comment.setFixedHeight(50)
        self.commentbox = QVBoxLayout()
        self.commentSubmit = QPushButton("Comment")
        self.commentSubmit.setObjectName("commentSubmit")
        self.commentSubmit.setFixedWidth(200)
        self.commentSubmit.clicked.connect(lambda: self.submitComment())
        self.commentbox.addWidget(self.comment)
        self.likehbox.addWidget(self.commentSubmit)
        self.likehbox.addWidget(self.likeButton)
        self.commentbox.addLayout(self.likehbox)

        self.commentSection = QLabel("Comments:")
        self.commentSection.setFixedHeight(50)
        self.commentSection.setObjectName("commentSection")
        self.commentSection.setFixedHeight(30)
        self.commentbox.addWidget(self.commentSection)
        self.commentSection_comments = QTextEdit("No Comments Yet")
        self.commentSection_comments.setObjectName("commentSection_comments")
        self.commentSection_comments.setReadOnly(True)
        self.commentSection_comments.setFixedHeight(50)

        self.commentbox.addWidget(self.commentSection_comments)
        self.vboxlayout.addLayout(self.commentbox)

        self.setLayout(self.vboxlayout)
        self.playbutton.clicked.connect(lambda: self.PlayPause())
        self.stopbutton.clicked.connect(lambda: self.Stop())

        self.resize(640, 480)

        self.timer = QTimer(self)
        self.timer.setInterval(500)
        self.timer.timeout.connect(self.updateUI)

        self.stats = None

        self.loaded = False
        self.video = pafy.new(self.url)

        self.best = self.video.getbest()

        self.media = self.instance.media_new(self.best.url)

        self.mediaplayer.set_media(self.media)

        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

        self.LoadComments()

    def openStats(self):
        if (self.stats != None):
            del self.stats

        result = self.controller.isMovieForUser(self.movieID, self.user.id)
        if (isinstance(self.user, Professor) == True and len(result) > 0):
            self.numberofViews = result[0][1]
            self.description = result[0][0]
            self.numofLikes = result[0][2]

        self.stats = self.controller.openStatsLayout(self.numberofViews,
                                                     self.description,
                                                     self.numofLikes)
        self.stats.show()

    def LikeDislike(self):
        if (self.likeButton.text() == "DisLike"):
            self.controller.removieLike(self.movieID, self.user.id)
            self.likeButton.setText("Like")
        elif (self.likeButton.text() == "Like"):
            self.controller.LikeMovie(self.movieID, self.user.id)
            self.likeButton.setText("DisLike")

    def submitComment(self):
        if (self.comment.toPlainText() != ""):
            result = self.controller.submitComment(self.movieID,
                                                   self.comment.toPlainText(),
                                                   self.user.username)
            if (result == 1):
                self.commentSection_comments.setPlainText(
                    self.user.username + ": " + self.comment.toPlainText() +
                    "\n" + self.commentSection_comments.toPlainText())
                self.comment.setPlainText("")

    def LoadComments(self):
        comments = self.controller.getComments(self.movieID)
        comment = ""
        for i in comments:
            comment += i[1] + ": " + i[0] + "\n"
        self.commentSection_comments.setPlainText(comment)

    #Plays and pauses the movie, same button changes status from play to pause
    def PlayPause(self):
        print("Play Pause")
        if (self.loaded == False):
            self.loaded = True

        if self.mediaplayer.is_playing():

            self.mediaplayer.pause()
            #self.playbutton.setText("Play")
            self.isPaused = True
        else:

            self.mediaplayer.play()
            #self.playbutton.setText("Pause")
            self.timer.start()
            self.isPaused = False

    #stops the movie, unloads it, pressing this requires loading the movie again
    def Stop(self):
        self.mediaplayer.stop()
        #self.playbutton.setText("Play")

    #Opens the movie from youtube and sets it in the appropriate layout item to be showcased
    #TODO: add and use param (string youtube_url)
    def OpenFile(self, filename=None):

        self.video = pafy.new(self.url)
        self.best = self.video.getbest()
        self.media = self.instance.media_new(self.best.url)
        self.mediaplayer.set_media(self.media)

        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

    #Changes the volume of the media player
    def setVolume(self, Volume):
        #Set the volume
        self.mediaplayer.audio_set_volume(Volume)

    #Sets the position of the video slider, responsible for going to different times in the movie
    def setPosition(self, position):
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 1000.0)
        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)

    #function used by timer to keep the movie's time slider indicator in the right position
    def updateUI(self):
        # setting the slider to the desired position
        self.positionslider.setValue(self.mediaplayer.get_position() * 1000)
Esempio n. 15
0
class VideoWindow(QMainWindow):
    def __init__(self, parent=None):
        super(VideoWindow, self).__init__(parent)

        self.instance = vlc.Instance()
        self.mediaPlayer = self.instance.media_list_player_new()

        self.instance = vlc.Instance()
        self.mediaPlayer = self.instance.media_player_new()

        self.setUpGUI()
        self.search_window = SearchWindow()

    def setUpGUI(self):
        self.resize(800, 480)
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        if sys.platform == "darwin":
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()

        self.videoframe.mouseDoubleClickEvent = self.openDialog
        self.videoframe.mouseReleaseEvent = self.PlayPause
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)
        self.videoframe

        self.positionSlider = QSlider(Qt.Horizontal, self)
        self.positionSlider.setMaximum(1000)
        self.positionSlider.sliderMoved.connect(self.setPosition)

        self.hboxLayout = QHBoxLayout()
        self.hboxLayout.addWidget(self.positionSlider)
        self.hboxLayout.setSpacing(0)
        self.hboxLayout.setContentsMargins(0, 0, 0, 0)

        self.vboxLayout = QVBoxLayout()
        self.vboxLayout.addWidget(self.videoframe)
        self.vboxLayout.addLayout(self.hboxLayout)
        self.vboxLayout.setSpacing(0)
        self.vboxLayout.setContentsMargins(0, 0, 0, 0)

        self.widget.setLayout(self.vboxLayout)

        _open = QAction("&Open", self)
        _open.triggered.connect(sys.exit)

        try:
            _thread.start_new_thread(self.updateUI, ())
        except:
            print("error with positionSliderThread")

    def openDialog(self, event):
        self.search_window.hide() if self.search_window.isVisible(
        ) else self.search_window.show()
        self.search_window.start_listener()

    def updateUI(self):
        while True:
            if self.mediaPlayer.is_playing():
                self.positionSlider.setValue(self.mediaPlayer.get_position() *
                                             1000)

    def setPosition(self, position):
        self.mediaPlayer.set_position(position / 1000.0)

    def PlayPause(self, event):
        if self.mediaPlayer.is_playing():
            self.mediaPlayer.pause()
        else:
            self.mediaPlayer.play()

    def Stop(self):
        self.mediaPlayer.stop()

    def PlayVideo(self, videoId):
        yt_url = URL + videoId
        video = pafy.new(yt_url)
        best = video.getbest()
        playurl = best.url
        self.media = self.instance.media_new(playurl)
        self.media.get_mrl()
        self.mediaPlayer.set_media(self.media)

        if sys.platform.startswith('linux'):
            self.mediaPlayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":
            self.mediaPlayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":
            self.mediaPlayer.set_nsobject(int(self.videoframe.winId()))

        self.mediaPlayer.play()

    def setVolume(self, Volume):
        self.mediaPlayer.audio_set_volume(Volume)

    def setup_qr_icon(self):
        pixmap = QPixmap('./src/main/resources/qr.jpg')
        self.icon.setPixmap(pixmap)
        p = self.geometry().bottomRight() - self.icon.geometry().bottomRight(
        ) - QPoint(100, 100)
        self.icon.move(p)
Esempio n. 16
0
class F(QWidget):
    def __init__(self):
        super().__init__()
        self.setUI()

    def setUI(self):
        self.setGeometry(500, 400, 500, 600)
        self.setWindowTitle("Table")

        self.Qf = QFrame(self)
        self.Qf.setGeometry(100, 10, 300, 300)

        self.Qs = QSlider(Qt.Horizontal, self)
        self.Qs.setGeometry(100, 520, 300, 15)

        self.pa = self.Qf.palette()
        role = self.Qf.backgroundRole()
        self.pa.setColor(role, QColor(255, 255, 255))
        self.Qf.setPalette(self.pa)
        self.Qf.setAutoFillBackground(True)

        self.Qs.valueChanged.connect(self.paint)

        self.show()

    def paint(self):

        R = []
        G = []
        B = []

        for i in range(0, 100):
            R.append(random.randrange(0, 256))
            G.append(random.randrange(0, 256))
            B.append(random.randrange(0, 256))

        rang = []
        jam = []

        slideval = self.Qs.value()

        for b in range(0, 100):
            rang = [R[b], G[b], B[b]]
            jam.append(rang)

        print(jam)

        self.palette = self.Qf.palette()
        r = self.Qf.backgroundRole()

        if slideval == 0:
            self.x = 255
            self.y = 255
            self.z = 250

            self.palette.setColor(r, QColor(self.x, self.y, self.z))
            self.Qf.setPalette(self.palette)
            self.Qf.setAutoFillBackground(True)

        elif slideval == 99:
            self.x = 0
            self.y = 0
            self.z = 0
            self.palette.setColor(r, QColor(self.x, self.y, self.z))
            self.Qf.setPalette(self.palette)
            self.Qf.setAutoFillBackground(True)

        else:
            self.x, self.y, self.z = jam[slideval]
            self.palette.setColor(r, QColor(self.x, self.y, self.z))
            self.Qf.setPalette(self.palette)
            self.Qf.setAutoFillBackground(True)
Esempio n. 17
0
class Player(QMainWindow):
    """
    A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        super().__init__()
        self.setWindowTitle("CCTV by @XII")

        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.path = ''

        self.initUI()
        self.isPaused = False
        self.setStyleSheet(open("style.qss", "r").read())

    def initUI(self):
        """
        Set up the user interface, signals & slots
        For better understaning, I made some shortcuts for variables,
        which is the instance of the QtWidgets classes.
        List of shortcuts(made):
        *btn - QPushButton;
        *lbl - QLabel;
        *slr - QSlider;
        *lyt - Q_lyt;
        *ctrl - ctrl;
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        #video widget
        self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QtGui.QPalette.Window, QtGui.QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        #time value
        self.timevalue = QDateTimeEdit()
        self.timevalue.setDisplayFormat('hh:mm:ss')
        self.timevalue.setReadOnly(True)
        self.timevalue.setFixedSize(80, 30)

        #position slider
        self.position_slr = QSlider(QtCore.Qt.Horizontal, self)
        self.position_slr.setToolTip("Position")
        self.position_slr.setMaximum(1000)
        self.position_slr.sliderMoved.connect(self.set_position)

        #play button
        self.play_btn = QPushButton()
        self.play_btn.setProperty("onplay", True)
        self.play_btn.setObjectName("play")
        self.play_btn.clicked.connect(self.play_pause)

        #stop button
        self.stop_btn = QPushButton()
        self.stop_btn.setObjectName('stop')
        self.stop_btn.clicked.connect(self.stop)

        #analyse button
        self.analyse_btn = QPushButton('Analyse')
        self.analyse_btn.setObjectName('analyse')
        self.analyse_btn.setFixedSize(70, 28)
        self.analyse_btn.clicked.connect(self.start_analyse)
        self.analyse_window = Analyse(self)
        self.analyse_window.off()
        self.analyse_btn.setEnabled(False)
        self.on_analyse = False

        self.details_btn = QPushButton('Details')
        self.details_btn.setVisible(False)
        self.details_btn.setObjectName('details')
        self.details_btn.setFixedSize(70, 28)
        self.details_btn.clicked.connect(self.show_details)

        self.details_wd = pictureViewer()
        self.details_wd.close()

        self.threadpool = QtCore.QThreadPool()
        self.threadpool.setMaxThreadCount(1)
        worker = loadModules(self)
        self.threadpool.start(worker)

        self.path_input = pathLineEdit(self)
        self.path_input.setObjectName('path')

        self.folder_btn = QPushButton()
        self.folder_btn.setObjectName('folder')
        self.folder_btn.clicked.connect(
            lambda x: self.select_folder(foldername=''))

        self.fileslist_lbl = QLabel('Playlist:')
        self.fileslist_lbl.setObjectName('lbl')
        self.fileslist_lbl.setIndent(12)

        self.fileslist = QListWidget()
        self.fileslist.itemClicked.connect(self.select_file)

        self.warnings_lbl = QLabel('Warnings time:')
        self.warnings_lbl.setObjectName('lbl')
        self.warnings_lbl.setIndent(12)

        self.warningslist = QListWidget()

        #volume slider
        self.volume_slr = QSlider(QtCore.Qt.Horizontal, self)
        self.volume_slr.setMaximum(100)
        self.volume_slr.setValue(self.mediaplayer.audio_get_volume())
        self.volume_slr.setToolTip("Volume")
        self.volume_slr.valueChanged.connect(self.set_volume)

        #setting up layouts
        folder_lyt = QHBoxLayout()
        folder_lyt.addWidget(self.path_input)
        folder_lyt.addWidget(self.folder_btn)

        leftside_lyt = QVBoxLayout()
        leftside_lyt.setContentsMargins(0, 10, 0, 0)
        leftside_lyt.addSpacing(6)
        leftside_lyt.addWidget(self.fileslist_lbl)
        leftside_lyt.addWidget(self.fileslist)

        analyse_btns = QHBoxLayout()
        analyse_btns.addWidget(self.details_btn)
        analyse_btns.addWidget(self.analyse_btn)
        leftside_lyt.addLayout(analyse_btns)

        leftside_lyt.addWidget(self.warnings_lbl)
        leftside_lyt.addWidget(self.warningslist)
        leftside_lyt.addLayout(folder_lyt)
        leftside_lyt.addSpacing(6)

        self.leftside_bg = QWidget()
        self.leftside_bg.setObjectName("leftside_bg")
        self.leftside_bg.setLayout(leftside_lyt)

        ctrl_lyt = QHBoxLayout()
        ctrl_lyt.addSpacing(20)
        ctrl_lyt.addWidget(self.play_btn)
        ctrl_lyt.setSpacing(0)
        ctrl_lyt.addWidget(self.stop_btn)
        ctrl_lyt.addStretch(1)
        ctrl_lyt.addWidget(self.volume_slr)

        ctrl_panel_lyt = QVBoxLayout()
        ctrl_panel_lyt.setContentsMargins(60, 12, 60, 12)
        ctrl_panel_lyt.addWidget(self.timevalue, 0, QtCore.Qt.AlignLeft)
        ctrl_panel_lyt.addWidget(self.position_slr)
        ctrl_panel_lyt.addLayout(ctrl_lyt)

        rightside_lyt = QVBoxLayout()
        rightside_lyt.addWidget(self.videoframe)
        rightside_lyt.addLayout(ctrl_panel_lyt)

        main_lyt = QHBoxLayout()
        main_lyt.setSpacing(0)
        main_lyt.setContentsMargins(0, 0, 0, 0)
        main_lyt.addWidget(self.leftside_bg)
        main_lyt.addLayout(rightside_lyt, 60)

        self.widget.setLayout(main_lyt)

        self.timer = QtCore.QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

        #creates connection to db
        self.db = db_api.create_connection(
            os.path.join(os.getcwd(), 'db', 'data.db'))

    def play_pause(self):
        """
        Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.play_btn.setProperty("onplay", True)
            self.play_btn.setStyle(self.play_btn.style())
            self.isPaused = True

        else:
            if self.mediaplayer.play() == -1:
                return
            self.mediaplayer.play()
            self.play_btn.setProperty("onplay", False)
            self.play_btn.setStyle(self.play_btn.style())

            self.timer.start()
            self.isPaused = False

    def start_analyse(self):

        self.analyse_btn.setEnabled(False)

        try:
            file = self.fileslist.currentItem().text()
        except AttributeError:
            self.analyse_btn.setEnabled(True)
            QMessageBox.information(self, "Warning!",
                                    "You should to select a file.")
            return

        if not self.on_analyse:
            self.setEnabled(False)
            self.analyse_window.on()

            try:
                worker = AnalyseWorker(file, self)
                self.threadpool.start(worker)
            except Exception as e:
                print(e)
        else:
            return

    def show_details(self):

        try:
            file = self.fileslist.currentItem().text()
        except AttributeError:
            self.analyse_btn.setEnabled(True)
            QMessageBox.information(self, "Warning!",
                                    "You should to select a file.")
            return

        item = self.fileslist.currentItem().text()
        if os.path.isdir(os.path.join('warnings', os.path.splitext(item)[0])):
            self.details_wd.show()
            self.details_wd.start(self.fileslist.currentItem().text())
        else:
            return

    def stop_analyse(self):
        self.analyse_window.off()
        self.setEnabled(True)
        self.on_analyse = False

    def stop(self):
        """
        stop player
        """
        if self.mediaplayer.is_playing():
            self.timevalue.setTime(QtCore.QTime.fromMSecsSinceStartOfDay(0))

        self.mediaplayer.stop()

    def select_file(self, item):
        self.open_file(filename=self.path + '/' + item.text())

    def check_warnings_time(self, filename):
        with self.db:
            file_id = db_api.select_file(self.db, filename)
            if file_id:

                #if file in db, then add warning times in list bellow
                timelist = db_api.select_time(self.db, file_id)

                self.warningslist.clear()
                for time in timelist:
                    self.warningslist.addItem(time[0] + "-" + time[1])

                self.details_btn.setVisible(True)

            else:
                self.details_btn.setVisible(False)
                self.warningslist.clear()
                self.warningslist.addItem("There is nothing to show.")

    def open_file(self, filename=''):
        """
        Open a media file in a MediaPlayer
        """
        if filename == '':
            filename = QFileDialog.getOpenFileName(self, "Open File", './')[0]
        if not filename:
            return

        self.check_warnings_time(os.path.split(filename)[1])

        # create the media
        self.media = self.instance.media_new(filename)

        # put the media in the media player
        self.mediaplayer.set_media(self.media)

        # parse the metadata of the file
        self.media.parse_async()

        fullpath = re.escape(filename)

        # get video duration
        time = os.popen("ffmpeg -i {0}".format(fullpath) +
                        " 2>&1 | grep Duration | awk '{print $2}' | tr -d ,"
                        ).read().split(':')
        self.duration = int(3600000 * int(time[0]) + 60000 * int(time[1]) +
                            1000 * float(time[2]))

        # set the title of the track as window title
        self.setWindowTitle("CCTV: " + self.media.get_meta(0))

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have diffqerent functions for this
        if sys.platform == "linux":  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_agl(self.videoframe.windId())
        self.play_pause()

    def set_volume(self, Volume):
        """
        Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def set_position(self, position):
        """
        Set the position
        """
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 1000.0)
        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)
        self.timevalue.setTime(
            QtCore.QTime.fromMSecsSinceStartOfDay(
                self.mediaplayer.get_position() * self.duration))

    def set_time(self, time):
        """
        Set time to display
        """
        self.mediaplayer.set_time(time)

    def select_folder(self, foldername=''):
        if foldername == '':
            foldername = str(
                QFileDialog.getExistingDirectory(self, "Select Directory"))
            self.path_input.setText(foldername)
            self.path = foldername
        if not foldername:
            return

        files = os.listdir(foldername)
        self.path = foldername
        self.fileslist.clear()
        for file in files:
            self.fileslist.addItem(file)

    def updateUI(self):
        """
        updates the user interface
        """
        # setting the slider to the desired position
        self.position_slr.setValue(self.mediaplayer.get_position() * 1000)
        self.timevalue.setTime(
            QtCore.QTime.fromMSecsSinceStartOfDay(
                self.mediaplayer.get_position() * self.duration))
        self.volume_slr.setValue(self.mediaplayer.audio_get_volume())

        if not self.mediaplayer.is_playing():
            # no need to call this function if nothing is played
            self.timer.stop()
            if not self.isPaused:
                # after the video finished, the play button stills shows
                # "Pause", not the desired behavior of a media player
                # this will fix it
                self.stop()
class Player(QMainWindow):
    def __init__(self, f=" ", master=None):
        QMainWindow.__init__(self, master)
        self.setWindowTitle("Media Player")
        self.filename = f
        self.instance = vlc.Instance()
        self.mediaplayer = self.instance.media_player_new()
        self.createUI()
        self.isPaused = False

    def createUI(self):
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.positionslider = QSlider(Qt.Horizontal, self)
        self.positionslider.setToolTip("Position")
        self.positionslider.setMaximum(1000)
        self.positionslider.sliderMoved.connect(self.setPosition)

        self.hbuttonbox = QHBoxLayout()
        self.playbutton = QPushButton("Play")
        self.hbuttonbox.addWidget(self.playbutton)
        self.playbutton.clicked.connect(self.PlayPause)

        self.stopbutton = QPushButton("Stop")
        self.hbuttonbox.addWidget(self.stopbutton)
        self.stopbutton.clicked.connect(self.Stop)

        self.hbuttonbox.addStretch(1)
        self.volumeslider = QSlider(Qt.Horizontal, self)
        self.volumeslider.setMaximum(100)
        self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        self.volumeslider.setToolTip("Volume")
        self.hbuttonbox.addWidget(self.volumeslider)
        self.volumeslider.valueChanged.connect(self.setVolume)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addWidget(self.positionslider)
        self.vboxlayout.addLayout(self.hbuttonbox)

        self.widget.setLayout(self.vboxlayout)

        open = QAction("&Open", self)
        open.triggered.connect(self.OpenFile)
        exit = QAction("&Exit", self)
        exit.triggered.connect(sys.exit)
        menubar = self.menuBar()
        filemenu = menubar.addMenu("&File")
        filemenu.addAction(open)
        filemenu.addSeparator()
        filemenu.addAction(exit)

        self.timer = QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

    def PlayPause(self):
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.playbutton.setText("Play")
            self.isPaused = True
        else:
            if self.mediaplayer.play() == -1:
                self.OpenFile()
                return
            self.mediaplayer.play()
            self.playbutton.setText("Pause")
            self.timer.start()
            self.isPaused = False

    def Stop(self):

        self.mediaplayer.stop()
        self.playbutton.setText("Play")

    def OpenFile(self, filename=None):
        self.media = self.instance.media_new(self.filename)
        # put the media in the media player
        self.mediaplayer.set_media(self.media)
        self.media.parse()
        self.setWindowTitle(self.media.get_meta(0))

        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))
        self.PlayPause()

    def setVolume(self, Volume):
        self.mediaplayer.audio_set_volume(Volume)

    def setPosition(self, position):
        self.mediaplayer.set_position(position / 1000.0)

    def updateUI(self):
        self.positionslider.setValue(self.mediaplayer.get_position() * 1000)
        if not self.mediaplayer.is_playing():
            self.timer.stop()
            if not self.isPaused:
                self.Stop()
Esempio n. 19
0
 def initWin(self):
     iptGrid = QGridLayout()
     title = Text("TSP", (255, 0, 0), 16, "center")
     pic = QPixmap("C:\\tsp.png")
     picLbl = QLabel()
     picLbl.setPixmap(pic)
     picLbl.setScaledContents(True)
     titleLayout = QVBoxLayout()
     titleLayout.addWidget(title)
     titleLayout.addWidget(picLbl)
     titleFrame = QFrame()
     titleFrame.setFrameShape(QFrame.StyledPanel)
     titleFrame.setAutoFillBackground(True)
     p5 = titleFrame.palette()
     p5.setColor(titleFrame.backgroundRole(), QColor(255, 255, 255))
     titleFrame.setPalette(p5)
     titleFrame.setLayout(titleLayout)
     iptTitle = Text("Program Input", (255, 0, 0), 12, "center")
     iptTxt1 = QLabel("Cities No:")
     iptTxt1.setFont(QFont("Decorative", 12))
     iptTxt2 = QLabel("start:")
     iptTxt2.setFont(QFont("Decorative", 12))
     self.iptEdt1 = QLineEdit()
     self.iptEdt1.textChanged[str].connect(self.get_input)
     self.iptEdt2 = QLineEdit()
     self.iptEdt2.textChanged[str].connect(self.get_input)
     self.iptBtn1 = QPushButton("Build")
     self.iptBtn1.clicked.connect(self.bulid_map)
     self.iptBtn2 = QPushButton("Rturn")
     self.iptBtn2.clicked.connect(self.get_initial)
     iptH = QHBoxLayout()
     iptH.addWidget(self.iptBtn1)
     iptH.addWidget(self.iptBtn2)
     iptGrid.addWidget(iptTitle, 1, 0, 1, 5)
     iptGrid.addWidget(iptTxt1, 2, 0)
     iptGrid.addWidget(self.iptEdt1, 2, 1)
     iptGrid.addWidget(iptTxt2, 3, 0)
     iptGrid.addWidget(self.iptEdt2, 3, 1)
     iptGrid.setVerticalSpacing(10)
     iptV = QVBoxLayout()
     iptV.addLayout(iptGrid)
     iptV.addLayout(iptH)
     iptFrame = QFrame()
     iptFrame.setAutoFillBackground(True)
     p6 = iptFrame.palette()
     p6.setColor(iptFrame.backgroundRole(), QColor(220, 225, 255))
     iptFrame.setPalette(p6)
     iptFrame.setFrameShape(QFrame.StyledPanel)
     iptFrame.setLayout(iptV)
     srgGrid = QGridLayout()
     #srgGrid.setVerticalSpacing(10)
     srgTitle = Text("Algorithms", (255, 0, 0), 12, "center")
     self.srgBtn1 = QPushButton("Genetic")
     self.srgBtn1.clicked.connect(self.run_algorithm)
     self.srgBtn2 = QPushButton("Simulated")
     self.srgBtn2.clicked.connect(self.run_algorithm)
     self.srgBtn3 = QPushButton("Tabu")
     self.srgBtn3.clicked.connect(self.run_algorithm)
     self.srgBtn4 = QPushButton("reset")
     self.srgBtn4.clicked.connect(self.reset)
     srgGrid.addWidget(srgTitle, 1, 0, 1, 6)
     srgGrid.addWidget(self.srgBtn1, 2, 1, 2, 4)
     srgGrid.addWidget(self.srgBtn2, 3, 1, 3, 4)
     srgGrid.addWidget(self.srgBtn3, 4, 1, 4, 4)
     srgGrid.addWidget(self.srgBtn4, 5, 1, 5, 4)
     srgFrame = QFrame()
     srgFrame.setFrameShape(QFrame.StyledPanel)
     srgFrame.setAutoFillBackground(True)
     p7 = srgFrame.palette()
     p7.setColor(srgFrame.backgroundRole(), QColor(255, 255, 255))
     srgFrame.setPalette(p7)
     srgFrame.setLayout(srgGrid)
     otpGrid = QGridLayout()
     otpTitle = Text("Program Output", (255, 0, 0), 12, "center")
     otpTxt1 = QLabel("The Cost")
     otpTxt1.setFont(QFont("Decorative", 12))
     self.lcd1 = QLCDNumber()
     otpGrid.addWidget(otpTitle, 1, 0, 1, 2)
     otpGrid.addWidget(otpTxt1, 2, 0)
     otpGrid.addWidget(self.lcd1, 2, 1)
     otpFrame = QFrame()
     otpFrame.setFrameShape(QFrame.StyledPanel)
     otpFrame.setAutoFillBackground(True)
     p8 = otpFrame.palette()
     p8.setColor(otpFrame.backgroundRole(), QColor(220, 225, 255))
     otpFrame.setPalette(p8)
     otpFrame.setLayout(otpGrid)
     splitter1 = QSplitter(Qt.Vertical)
     splitter1.addWidget(titleFrame)
     splitter1.addWidget(iptFrame)
     splitter1.setSizes([240, 135])
     splitter2 = QSplitter(Qt.Vertical)
     splitter2.addWidget(srgFrame)
     splitter2.addWidget(otpFrame)
     splitter2.setSizes([200, 92])
     splitter3 = QSplitter(Qt.Vertical)
     splitter3.addWidget(splitter1)
     splitter3.addWidget(splitter2)
     splitter3.setSizes([382, 291])
     splitter3.resize(260, 685)
     splitter3.move(1100, 5)
     splitter3.setParent(self)
     splitter3.setAutoFillBackground(True)
     p3 = splitter3.palette()
     p3.setColor(splitter3.backgroundRole(), QColor(255, 255, 255))
     splitter3.setPalette(p3)
     self.mapFrame = QFrame()
     self.mapFrame.setFrameShape(QFrame.StyledPanel)
     self.mapFrame.move(5, 5)
     self.mapFrame.resize(1090, 685)
     self.mapFrame.setParent(self)
     self.setAutoFillBackground(True)
     p2 = self.palette()
     p2.setColor(self.backgroundRole(), QColor(0, 0, 0))
     self.setPalette(p2)
     self.mapFrame.setParent(self)
     self.hint = Text("Click the bulid button to bulid a random map",
                      (255, 0, 0), 23, "center")
     self.hint.move(230, 100)
     self.hint.setParent(self)
     self.setWindowTitle("TSP")
     self.width = QDesktopWidget().availableGeometry().width()
     self.height = QDesktopWidget().availableGeometry().height() - 40
     self.resize(self.width, self.height)
     self.show()
     self.nodes = {}
     self.points = {}
     self.flag = True
Esempio n. 20
0
class Player(QMainWindow):
    """
    Modification of the simple Media Player using VLC and Qt
    to show the mambo stream

    The window part of this example was modified from the QT example cited below.
    VLC requires windows to create and show the video and this was a cross-platform solution.
    VLC will automatically create the windows in linux but not on the mac.
    Amy McGovern, [email protected]

    Qt example for VLC Python bindings
    https://github.com/devos50/vlc-pyqt5-example
    Copyright (C) 2009-2010 the VideoLAN team

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
    """
    def __init__(self, vlc_player, drone_gui):
        """
        Create a UI window for the VLC player
        :param vlc_player: the VLC player (created outside the function)
        """
        QMainWindow.__init__(self)
        self.setWindowTitle("VLC Tello Video Player")

        # save the media player
        self.mediaplayer = vlc_player

        # need a reference to the main drone vision class
        self.drone_vision = drone_gui

        # create the GUI
        self.createUI()

    def createUI(self):
        """
        Set up the window for the VLC viewer
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.hbuttonbox = QHBoxLayout()
        self.playbutton = QPushButton("Run my program")
        self.hbuttonbox.addWidget(self.playbutton)
        self.playbutton.clicked.connect(
            partial(self.drone_vision.run_user_code, self.playbutton))

        self.landbutton = QPushButton("Land NOW")
        self.hbuttonbox.addWidget(self.landbutton)
        self.landbutton.clicked.connect(self.drone_vision.land)

        self.stopbutton = QPushButton("Quit")
        self.hbuttonbox.addWidget(self.stopbutton)
        self.stopbutton.clicked.connect(self.drone_vision.close_exit)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addLayout(self.hbuttonbox)

        self.widget.setLayout(self.vboxlayout)

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have different functions for this
        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))
Esempio n. 21
0
class StockDialog(QWidget):
    def __init__(self, parent=None):
        super(StockDialog, self).__init__(parent)
        self.setWindowTitle("QT painter")

        mainSplitter = QSplitter(Qt.Horizontal)
        mainSplitter.setOpaqueResize(True)

        frame = QFrame(mainSplitter)
        mainLayout = QGridLayout(frame)
        # mainLayout.setMargin(10)
        mainLayout.setSpacing(6)

        label1 = QLabel("形状:")
        label2 = QLabel("画笔线宽:")
        label3 = QLabel("画笔颜色:")
        label4 = QLabel("画笔风格:")
        label5 = QLabel("画笔顶端:")
        label6 = QLabel("画笔连接点:")
        label7 = QLabel("画刷风格:")
        label8 = QLabel("画刷颜色:")

        self.shapeComboBox = QComboBox()
        self.shapeComboBox.addItem("Line", "Line")
        self.shapeComboBox.addItem("Rectangle", "Rectangle")
        self.shapeComboBox.addItem('Rounded Rectangle', 'Rounded Rectangle')
        self.shapeComboBox.addItem('Ellipse', 'Ellipse')
        self.shapeComboBox.addItem('Pie', 'Pie')
        self.shapeComboBox.addItem('Chord', 'Chord')
        self.shapeComboBox.addItem('Path', 'Path')
        self.shapeComboBox.addItem('Polygon', 'Polygon')
        self.shapeComboBox.addItem('Polyline', 'Polyline')
        self.shapeComboBox.addItem('Arc', 'Arc')
        self.shapeComboBox.addItem('Points', 'Points')
        self.shapeComboBox.addItem('Text', 'Text')
        self.shapeComboBox.addItem('Pixmap', 'Pixmap')

        self.widthSpinBox = QSpinBox()
        self.widthSpinBox.setRange(0, 20)

        self.penColorFrame = QFrame()
        self.penColorFrame.setAutoFillBackground(True)
        self.penColorFrame.setPalette(QPalette(Qt.blue))
        self.penColorPushButton = QPushButton("更改")

        self.penStyleComboBox = QComboBox()
        self.penStyleComboBox.addItem("Solid", Qt.SolidLine)
        self.penStyleComboBox.addItem('Dash', Qt.DashLine)
        self.penStyleComboBox.addItem('Dot', Qt.DotLine)
        self.penStyleComboBox.addItem('Dash Dot', Qt.DashDotLine)
        self.penStyleComboBox.addItem('Dash Dot Dot', Qt.DashDotDotLine)
        self.penStyleComboBox.addItem('None', Qt.NoPen)

        self.penCapComboBox = QComboBox()
        self.penCapComboBox.addItem("Flat", Qt.FlatCap)
        self.penCapComboBox.addItem('Square', Qt.SquareCap)
        self.penCapComboBox.addItem('Round', Qt.RoundCap)

        self.penJoinComboBox = QComboBox()
        self.penJoinComboBox.addItem("Miter", Qt.MiterJoin)
        self.penJoinComboBox.addItem('Bebel', Qt.BevelJoin)
        self.penJoinComboBox.addItem('Round', Qt.RoundJoin)

        self.brushStyleComboBox = QComboBox()
        self.brushStyleComboBox.addItem("Linear Gradient",
                                        Qt.LinearGradientPattern)
        self.brushStyleComboBox.addItem('Radial Gradient',
                                        Qt.RadialGradientPattern)
        self.brushStyleComboBox.addItem('Conical Gradient',
                                        Qt.ConicalGradientPattern)
        self.brushStyleComboBox.addItem('Texture', Qt.TexturePattern)
        self.brushStyleComboBox.addItem('Solid', Qt.SolidPattern)
        self.brushStyleComboBox.addItem('Horizontal', Qt.HorPattern)
        self.brushStyleComboBox.addItem('Vertical', Qt.VerPattern)
        self.brushStyleComboBox.addItem('Cross', Qt.CrossPattern)
        self.brushStyleComboBox.addItem('Backward Diagonal', Qt.BDiagPattern)
        self.brushStyleComboBox.addItem('Forward Diagonal', Qt.FDiagPattern)
        self.brushStyleComboBox.addItem('Diagonal Cross', Qt.DiagCrossPattern)
        self.brushStyleComboBox.addItem('Dense 1', Qt.Dense1Pattern)
        self.brushStyleComboBox.addItem('Dense 2', Qt.Dense2Pattern)
        self.brushStyleComboBox.addItem('Dense 3', Qt.Dense3Pattern)
        self.brushStyleComboBox.addItem('Dense 4', Qt.Dense4Pattern)
        self.brushStyleComboBox.addItem('Dense 5', Qt.Dense5Pattern)
        self.brushStyleComboBox.addItem('Dense 6', Qt.Dense6Pattern)
        self.brushStyleComboBox.addItem('Dense 7', Qt.Dense7Pattern)
        self.brushStyleComboBox.addItem('None', Qt.NoBrush)

        self.brushColorFrame = QFrame()
        self.brushColorFrame.setAutoFillBackground(True)
        self.brushColorFrame.setPalette(QPalette(Qt.green))
        self.brushColorPushButton = QPushButton("更改")

        labelCol = 0
        contentCol = 1

        # 建立布局
        mainLayout.addWidget(label1, 1, labelCol)
        mainLayout.addWidget(self.shapeComboBox, 1, contentCol)
        mainLayout.addWidget(label2, 2, labelCol)
        mainLayout.addWidget(self.widthSpinBox, 2, contentCol)
        mainLayout.addWidget(label3, 4, labelCol)
        mainLayout.addWidget(self.penColorFrame, 4, contentCol)
        mainLayout.addWidget(self.penColorPushButton, 4, 3)
        mainLayout.addWidget(label4, 6, labelCol)
        mainLayout.addWidget(self.penStyleComboBox, 6, contentCol)
        mainLayout.addWidget(label5, 8, labelCol)
        mainLayout.addWidget(self.penCapComboBox, 8, contentCol)
        mainLayout.addWidget(label6, 10, labelCol)
        mainLayout.addWidget(self.penJoinComboBox, 10, contentCol)
        mainLayout.addWidget(label7, 12, labelCol)
        mainLayout.addWidget(self.brushStyleComboBox, 12, contentCol)
        mainLayout.addWidget(label8, 14, labelCol)
        mainLayout.addWidget(self.brushColorFrame, 14, contentCol)
        mainLayout.addWidget(self.brushColorPushButton, 14, 3)
        mainSplitter1 = QSplitter(Qt.Horizontal)
        mainSplitter1.setOpaqueResize(True)

        stack1 = QStackedWidget()
        stack1.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.area = PaintArea()
        stack1.addWidget(self.area)
        frame1 = QFrame(mainSplitter1)
        mainLayout1 = QVBoxLayout(frame1)
        # mainLayout1.setMargin(10)
        mainLayout1.setSpacing(6)
        mainLayout1.addWidget(stack1)

        layout = QGridLayout(self)
        layout.addWidget(mainSplitter1, 0, 0)
        layout.addWidget(mainSplitter, 0, 1)
        self.setLayout(layout)

        # 信号和槽函数
        self.shapeComboBox.activated.connect(self.slotShape)
        self.widthSpinBox.valueChanged.connect(self.slotPenWidth)
        self.penColorPushButton.clicked.connect(self.slotPenColor)
        self.penStyleComboBox.activated.connect(self.slotPenStyle)
        self.penCapComboBox.activated.connect(self.slotPenCap)
        self.penJoinComboBox.activated.connect(self.slotPenJoin)
        self.brushStyleComboBox.activated.connect(self.slotBrush)
        self.brushColorPushButton.clicked.connect(self.slotBrushColor)

        self.slotShape(self.shapeComboBox.currentIndex())
        self.slotPenWidth(self.widthSpinBox.value())
        self.slotBrush(self.brushStyleComboBox.currentIndex())

    def slotShape(self, value):
        shape = self.area.Shape[value]
        self.area.setShape(shape)

    def slotPenWidth(self, value):
        color = self.penColorFrame.palette().color(QPalette.Window)
        style = Qt.PenStyle(
            self.penStyleComboBox.itemData(
                self.penStyleComboBox.currentIndex(), Qt.UserRole))
        cap = Qt.PenCapStyle(
            self.penCapComboBox.itemData(self.penCapComboBox.currentIndex(),
                                         Qt.UserRole))
        join = Qt.PenJoinStyle(
            self.penJoinComboBox.itemData(self.penJoinComboBox.currentIndex(),
                                          Qt.UserRole))
        self.area.setPen(QPen(color, value, style, cap, join))

    def slotPenStyle(self, value):
        self.slotPenWidth(value)

    def slotPenCap(self, value):
        self.slotPenWidth(value)

    def slotPenJoin(self, value):
        self.slotPenWidth(value)

    def slotPenColor(self):
        color = QColorDialog.getColor(Qt.blue)
        self.penColorFrame.setPalette(QPalette(color))
        self.area.setPen(QPen(color))

    def slotBrushColor(self):
        color = QColorDialog.getColor(Qt.blue)
        self.brushColorFrame.setPalette(QPalette(color))
        self.slotBrush(self.brushStyleComboBox.currentIndex())

    def slotBrush(self, value):
        color = self.brushColorFrame.palette().color(QPalette.Window)
        style = Qt.BrushStyle(
            self.brushStyleComboBox.itemData(value, Qt.UserRole))

        if (style == Qt.LinearGradientPattern):
            linearGradient = QLinearGradient(0, 0, 400, 400)
            linearGradient.setColorAt(0.0, Qt.white)
            linearGradient.setColorAt(0.2, color)
            linearGradient.setColorAt(1.0, Qt.black)
            self.area.setBrush(linearGradient)
        elif style == Qt.RadialGradientPattern:
            radialGradient = QRadialGradient(200, 200, 80, 70, 70)
            radialGradient.setColorAt(0.0, Qt.white)
            radialGradient.setColorAt(0.2, Qt.green)
            radialGradient.setColorAt(1.0, Qt.black)
            self.area.setBrush(radialGradient)
        elif (style == Qt.ConicalGradientPattern):
            conicalGradient = QConicalGradient(200, 200, 30)
            conicalGradient.setColorAt(0.0, Qt.white)
            conicalGradient.setColorAt(0.2, color)
            conicalGradient.setColorAt(1.0, Qt.black)
            self.area.setBrush(conicalGradient)
        elif (style == Qt.TexturePattern):
            self.area.setBrush(QBrush(QPixmap("images/brick.png")))
        else:
            self.area.setBrush(QBrush(color, style))
Esempio n. 22
0
    class HeaderFrame(QFrame):
        """ Clickable frame with title. """

        class AbstractHeaderFrameItem(QFrame):

            def __init__(self, parent):
                super(__class__, self).__init__(parent)
                self.setContentsMargins(0, 0, 0, 0)
                self.setLayout(QHBoxLayout())
                self.layout().setContentsMargins(0, 0, 0, 0)
                self.layout().setSpacing(0)

            def clearLayout(self):
                while self.layout().count():
                    child = self.layout().takeAt(0)
                    if child.widget():
                        child.widget().deleteLater()

            def setCentralWidget(self, widget: QWidget):
                self.clearLayout()
                self.layout().addWidget(widget)

            def refresh(self):
                pass

        class VSepItem(AbstractHeaderFrameItem):

            def __init__(self, parent):
                super(__class__, self).__init__(parent)
                self.setCentralWidget(VSep(self))

        class HSpacerItem(AbstractHeaderFrameItem):

            def __init__(self, parent):
                super(__class__, self).__init__(parent)
                self.setCentralWidget(HSpacer(self))

        arrowClicked = pyqtSignal()
        upButtonClicked = pyqtSignal()
        downButtonClicked = pyqtSignal()
        configButtonClicked = pyqtSignal()
        closeButtonClicked = pyqtSignal()

        def __init__(self, parent: 'ui.widget.CollapsibleFrame'):
            super(__class__, self).__init__(parent)

            self._parent = parent
            self.setMinimumHeight(26)
            self.setMaximumHeight(26)
            self.indicateError(False)

            self._hlayout = QHBoxLayout()
            self._hlayout.setContentsMargins(0, 0, 0, 0)
            self._hlayout.setSpacing(0)

            self._arrow = None

            self._hlayout.addWidget(self._init_header_frame(parent.isCollapsed()))
            self.setLayout(self._hlayout)

        def _init_header_frame(self, collapsed: bool):
            self._frm_header = QFrame(self)
            self._frm_header.setMinimumHeight(24)
            self._frm_header.setMaximumHeight(24)
            frm_header_layout = QHBoxLayout(self)
            frm_header_layout.setContentsMargins(0, 0, 0, 0)
            frm_header_layout.addWidget(self._init_arrow(collapsed))
            background_color = self._frm_header.palette().color(self._frm_header.backgroundRole())
            self._frm_header.setStyleSheet("QFrame { border:0px; background:" + background_color.darker(96).name() + "; }")
            self._frm_header.setLayout(frm_header_layout)
            return self._frm_header

        def _init_arrow(self, collapsed):
            self._arrow = CollapsibleFrame.Arrow(self, collapsed=collapsed)
            self._arrow.setMinimumWidth(24)
            self._arrow.setMaximumWidth(24)
            self._arrow.setStyleSheet("border:0px")
            return self._arrow

        def addWidget(self, header_item: AbstractHeaderFrameItem):
            self._frm_header.layout().addWidget(header_item)

        def refresh(self):
            """ Refreshes the header model (e.g. line-count, character-count, etc.). """
            for i in range(self._frm_header.layout().count()):
                widget = self._frm_header.layout().itemAt(i).widget()
                if isinstance(widget, CollapsibleFrame.HeaderFrame.AbstractHeaderFrameItem):
                    widget.refresh()

        def indicateError(self, status: bool):
            """ Indicates an error by painting the title-border red. Otherweise black. """
            if status:
                self.setStyleSheet("QFrame { border:1px solid red; }")
            else:
                self.setStyleSheet("QFrame { border:1px solid rgb(41, 41, 41); }")

        def mouseReleaseEvent(self, event):
            if self.underMouse() and event.button() == QtCore.Qt.LeftButton:
                # The arrow (or something non-button like) was clicked
                self.arrowClicked.emit()
            return super(CollapsibleFrame.HeaderFrame, self).mousePressEvent(event)
Esempio n. 23
0
class Player(QMainWindow):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        self.setWindowTitle("Media Player")

        self.isAudio = False

        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.createUI()
        self.isPaused = False

    def createUI(self):
        """Set up the user interface, signals & slots
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()

        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        self.positionslider = QSlider(Qt.Horizontal, self)
        self.positionslider.setToolTip("Position")
        self.positionslider.setMaximum(1000)
        self.positionslider.sliderMoved.connect(self.setPosition)

        self.hbuttonbox = QHBoxLayout()

        self.playbutton = QPushButton("►")
        self.hbuttonbox.addWidget(self.playbutton)
        self.playbutton.clicked.connect(self.PlayPause)

        self.stopbutton = QPushButton("⯀")
        self.hbuttonbox.addWidget(self.stopbutton)
        self.stopbutton.clicked.connect(self.Stop)

        self.audiobutton = QPushButton("𝅘𝅥")
        self.hbuttonbox.addWidget(self.audiobutton)
        self.audiobutton.setToolTip(
            "Switch to audio only mode\n(must search again)")
        self.audiobutton.clicked.connect(self.AudioVideo)

        self.hbuttonbox.addStretch(1)
        self.volumeslider = QSlider(Qt.Horizontal, self)
        self.volumeslider.setMaximum(100)
        self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        self.volumeslider.setToolTip("Volume")
        self.hbuttonbox.addWidget(self.volumeslider)
        self.volumeslider.valueChanged.connect(self.setVolume)

        self.hbuttonbox2 = QHBoxLayout()

        self.searchline = QLineEdit()
        self.hbuttonbox2.addWidget(self.searchline)
        self.searchline.setToolTip("Enter search term here")

        self.searchbutton = QPushButton("Search")
        self.hbuttonbox2.addWidget(self.searchbutton)
        self.searchbutton.setToolTip("Press to search")
        self.searchbutton.clicked.connect(self.searchYouTube)

        self.searchresult = QHBoxLayout()

        #adding QListWidget to the layout causes the video frame
        #to disappear and im not sure why
        #self.searchresults = QListWidget(self)
        #self.searchresult.addWidget(self.searchresults)
        #self.searchresults.addItem("testing1")
        #self.searchresults.addItem("testing2")

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addWidget(self.videoframe)
        self.vboxlayout.addWidget(self.positionslider)
        self.vboxlayout.addLayout(self.hbuttonbox)
        self.vboxlayout.addLayout(self.hbuttonbox2)
        #self.vboxlayout.addLayout(self.searchresult)

        self.widget.setLayout(self.vboxlayout)

        open = QAction("&Open", self)
        open.triggered.connect(lambda: self.OpenFile())
        exit = QAction("&Exit", self)
        exit.triggered.connect(sys.exit)
        download = QAction("&Download", self)
        download.triggered.connect(self.downloadFile)
        menubar = self.menuBar()
        filemenu = menubar.addMenu("&File")
        filemenu.addAction(open)
        filemenu.addSeparator()
        filemenu.addAction(exit)
        filemenu.addSeparator()
        filemenu.addAction(download)

        self.timer = QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

    def AudioVideo(self):
        """Toggle whether a video is shown or just audio.
        requires another search to take effect"""
        if self.isAudio == False:
            self.isAudio = True
            self.audiobutton.setText("🎥")
            self.audiobutton.setToolTip(
                "Switch to video only mode\n(must search again)")
        else:
            self.isAudio = False
            self.audiobutton.setText("𝅘𝅥")
            self.audiobutton.setToolTip(
                "Switch to audio only mode\n(must search again)")

    def PlayPause(self):
        """Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.playbutton.setText("►")
            self.isPaused = True
        else:
            if self.mediaplayer.play() == -1:
                self.searchYouTube()
                return
            self.mediaplayer.play()
            self.playbutton.setText("❚❚")
            self.timer.start()
            self.isPaused = False

    def Stop(self):
        """Stop player
        """
        self.mediaplayer.stop()
        self.playbutton.setText("►")

    def OpenFile(self, filename=None):
        """Open a media file in a MediaPlayer
        """
        if filename is None:
            filename = QFileDialog.getOpenFileName(self, "Open File",
                                                   os.path.expanduser('~'))[0]
        if not filename:
            return

        # create the media
        if sys.version < '3':
            filename = unicode(filename)
        self.media = self.instance.media_new(filename)
        # put the media in the media player
        self.mediaplayer.set_media(self.media)

        # parse the metadata of the file
        self.media.parse()
        # set the title of the track as window title
        self.setWindowTitle(self.media.get_meta(0))

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have different functions for this
        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))
        self.PlayPause()

    def searchYouTube(self):
        """Search YouTube with search term and play top video"""
        searchTerm = self.searchline.text()
        self.searchline.clear()

        searchTerm = searchTerm.replace(" ", "+")  #For formatting

        #request youtube search results and web scrape information
        r = requests.get("https://www.youtube.com/results?search_query=" +
                         searchTerm)
        page = r.text
        soup = bs(page, 'html.parser')
        vids = soup.findAll('a', attrs={'class': 'yt-uix-tile-link'})

        self.titlelist = []
        self.videolist = []
        #create a list with all the links and titles of youtube videos
        for v in vids:
            tmp = 'https://www.youtube.com' + v['href']
            self.videolist.append(tmp)
            self.titlelist.append(v['title'])

        #currently only the top video will play
        url_0 = self.videolist[0]

        #use pafy to convert into a VLC playable video
        self.video_0 = pafy.new(url_0)

        #chooses whether to get video or audio only
        if self.isAudio:
            self.best = self.video_0.getbestaudio()
        else:
            self.best = self.video_0.getbest()

        #play in VLC
        playurl = self.best.url
        self.media = self.instance.media_new(playurl)
        self.media.get_mrl()
        self.mediaplayer.set_media(self.media)

        if sys.platform.startswith('linux'):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(int(self.videoframe.winId()))

        self.setWindowTitle(self.titlelist[0])
        self.PlayPause()

    def setVolume(self, Volume):
        """Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def setPosition(self, position):
        """Set the position
        """
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 1000.0)
        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)

    def downloadFile(self):
        """downloads the file currently playing, .mp4 for video or .webm for audio
        settings can be altered but are left default for now"""
        self.best.download()

    def updateUI(self):
        """updates the user interface"""
        # setting the slider to the desired position
        self.positionslider.setValue(self.mediaplayer.get_position() * 1000)

        if not self.mediaplayer.is_playing():
            # no need to call this function if nothing is played
            self.timer.stop()
            if not self.isPaused:
                # after the video finished, the play button stills shows
                # "Pause", not the desired behavior of a media player
                # this will fix it
                self.Stop()
Esempio n. 24
0
class GraphicalInterface(QMainWindow, Interface):
    def __init__(self, video_player, debug=False):
        self.__app = QApplication(sys.argv)
        super().__init__()
        self.__video_player = video_player
        #TODO get in .config the value of the volume by default
        self.__video_player.set_volume(100)
        # Property of the main window
        self.__width = 0
        self.__height = 0
        # List of all derivated object from the following QWidgets
        self.__palette = None
        self.__logo_image = None
        self.__previousbtn_image = None
        self.__skipbtn_image = None
        self.__playbtn_image = None
        self.__pausebtn_image = None
        # List of all the QWidget present in the main window
        self.__videotitle = None
        self.__searchbtn = None
        self.__searchbar = None
        self.__mainbox = None
        self.__modebox = None
        self.__logo = None
        self.__video_reader = None
        self.__previousbtn_audio = None
        self.__playbtn_audio = None
        self.__skipbtn_audio = None
        self.__previousbtn_video = None
        self.__playbtn_video = None
        self.__skipbtn_video = None
        self.__buttonbar_video = None
        # List of all the GraphicalObject in the main window
        self.__header = None
        self.__footer = None
        self.__body = None
        self.__gr_videotitle = None
        self.__gr_searchbar = None
        self.__gr_searchbtn = None
        self.__gr_modebox = None
        self.__gr_logo = None
        self.__gr_video_reader = None
        self.__gr_buttonbar_video = None

        self.__gr_previousbtn_audio = None
        self.__gr_playbtn_audio = None
        self.__gr_skipbtn_audio = None
        self.__gr_previousbtn_video = None
        self.__gr_playbtn_video = None
        self.__gr_skipbtn_video = None

        self.__object_list = []

        self.__debug = debug

    def main(self):
        """ 
        Main loop of the graphic interface
        """
        self.resize(640, 480)
        self.move(0, 0)
        self.setWindowTitle('Youtube Reader')
        self.setWindowIcon(QIcon('resources/icon.svg'))
        content = read_css("./css/main.css")
        self.setStyleSheet(content)
        self.__mainbox = GraphicalObject(self,
                                         width=640,
                                         height=480,
                                         pos_x=0,
                                         pos_y=0)

        self.__header = GraphicalObject(None,
                                        width=100,
                                        height=10,
                                        pos_x=0,
                                        pos_y=0,
                                        parent=self.__mainbox)

        self.__searchbar = QLineEdit(self)
        self.__searchbar.returnPressed.connect(self.handle_research)
        self.__gr_searchbar = GraphicalObject(self.__searchbar,
                                              width=70,
                                              height=60,
                                              pos_x=15,
                                              pos_y=20,
                                              parent=self.__header)

        self.__searchbtn = QPushButton('Search', self)
        self.__searchbtn.clicked.connect(self.handle_research)
        self.__gr_searchbtn = GraphicalObject(self.__searchbtn,
                                              width=10,
                                              height=60,
                                              pos_x=87,
                                              pos_y=20,
                                              parent=self.__header)

        self.__logo_image = QPixmap('resources/logo.png')
        self.__logo = QLabel(self)
        self.__logo.setScaledContents(True)
        self.__logo.setPixmap(self.__logo_image)
        self.__gr_logo = GraphicalObject(self.__logo,
                                         width=15,
                                         height=60,
                                         pos_x=0,
                                         pos_y=20,
                                         parent=self.__header)

        self.__body = GraphicalObject(None,
                                      width=100,
                                      height=80,
                                      pos_x=0,
                                      pos_y=10,
                                      parent=self.__mainbox)

        self.create_reader()
        self.set_player_mode(self.__video_player.get_mode())

        self.__footer = GraphicalObject(None,
                                        width=100,
                                        height=10,
                                        pos_x=0,
                                        pos_y=90,
                                        parent=self.__mainbox)

        self.__modebox = ComboDemo(self, self)
        self.__modebox.init_combo_box(self.__video_player.get_mode())
        self.__gr_modebox = GraphicalObject(self.__modebox,
                                            width=20,
                                            height=100,
                                            pos_x=80,
                                            pos_y=20,
                                            parent=self.__footer)

        self.show()
        self.__app.exec_()
        self.__video_player.stop_stream()

    def handle_research(self):
        my_string = self.__searchbar.text()
        self.__searchbar.clear()
        if "www.youtube.com/" in my_string:
            self.__video_player.add_url(my_string)
        else:
            print("Search functionnality not implemented yet. Put url please!")

    def create_reader(self):
        # code from github.com/devos50/vlc-pyqt5-example.git
        # Video UI
        if sys.platform == "darwin":
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.__video_reader = QMacCocoaViewContainer(0)
        else:
            self.__video_reader = QFrame(self)
        self.__palette = self.__video_reader.palette()
        self.__palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.__video_reader.setPalette(self.__palette)
        self.__video_reader.setAutoFillBackground(True)

        self.__gr_video_reader = GraphicalObject(self.__video_reader,
                                                 width=80,
                                                 height=80,
                                                 pos_x=10,
                                                 pos_y=10,
                                                 parent=self.__body)

        self.__videotitle = QLabel("No Video!", self)
        self.__videotitle.setWordWrap(True)
        self.__gr_videotitle = GraphicalObject(self.__videotitle,
                                               width=80,
                                               height=10,
                                               pos_x=10,
                                               pos_y=90,
                                               parent=self.__body)

        number_of_button = 3
        btn_height = 7
        btn_width = 7
        ui_origin_x = 0
        ui_origin_y = 100 - btn_height
        self.__buttonbar_video = QLabel(self)
        self.__buttonbar_video.setStyleSheet(
            "QLabel { background-color : white; color : blue; }")
        self.__gr_buttonbar_video = GraphicalObject(
            self.__buttonbar_video,
            width=100,
            height=btn_height,
            pos_x=0,
            pos_y=ui_origin_y,
            parent=self.__gr_video_reader)

        self.__previousbtn_video = TranslucidButton(self)
        self.__previousbtn_image = QPixmap('resources/back.svg')
        self.__previousbtn_video.setScaledContents(True)
        self.__previousbtn_video.setPixmap(self.__previousbtn_image)
        self.__gr_previousbtn_video = GraphicalObject(
            self.__previousbtn_video,
            width=btn_width,
            height=btn_height,
            pos_x=ui_origin_x + 0 * btn_width,
            pos_y=ui_origin_y,
            parent=self.__gr_video_reader)

        self.__skipbtn_video = TranslucidButton(self)
        self.__skipbtn_image = QPixmap('resources/skip.svg')
        self.__skipbtn_video.setScaledContents(True)
        self.__skipbtn_video.setPixmap(self.__skipbtn_image)
        self.__gr_skipbtn_video = GraphicalObject(
            self.__skipbtn_video,
            width=btn_width,
            height=btn_height,
            pos_x=ui_origin_x + 2 * btn_width,
            pos_y=ui_origin_y,
            parent=self.__gr_video_reader)

        self.__playbtn_video = TranslucidButton(self)
        self.__playbtn_video.clicked.connect(self.video_play_pause)
        self.__playbtn_image = QPixmap('resources/play.svg')
        self.__playbtn_video.setScaledContents(True)
        self.__playbtn_video.setPixmap(self.__playbtn_image)
        self.__gr_playbtn_video = GraphicalObject(
            self.__playbtn_video,
            width=btn_width,
            height=btn_height,
            pos_x=ui_origin_x + 1 * btn_width,
            pos_y=ui_origin_y,
            parent=self.__gr_video_reader)

        # Audio UI
        number_of_button = 3
        btn_height = 5
        btn_width = 10
        ui_origin_x = 30
        ui_origin_y = 50 - (btn_height / 2)

        self.__previousbtn_audio = QPushButton('Previous', self)
        #clicked.connect(self.handle_research)
        self.__gr_previousbtn_audio = GraphicalObject(
            self.__previousbtn_audio,
            width=btn_width,
            height=btn_height,
            pos_x=ui_origin_x + (0 *
                                 (100 - 2 * ui_origin_x)) / number_of_button,
            pos_y=ui_origin_y,
            parent=self.__body)

        self.__playbtn_audio = QPushButton('Play', self)
        self.__playbtn_audio.clicked.connect(self.audio_play_pause)
        self.__gr_playbtn_audio = GraphicalObject(
            self.__playbtn_audio,
            width=btn_width,
            height=btn_height,
            pos_x=ui_origin_x + (1 *
                                 (100 - 2 * ui_origin_x)) / number_of_button,
            pos_y=ui_origin_y,
            parent=self.__body)

        self.__skipbtn_audio = QPushButton('Skip', self)
        self.__skipbtn_audio.clicked.connect(self.__video_player.skip)
        self.__gr_skipbtn_audio = GraphicalObject(
            self.__skipbtn_audio,
            width=btn_width,
            height=btn_height,
            pos_x=ui_origin_x + (2 *
                                 (100 - 2 * ui_origin_x)) / number_of_button,
            pos_y=ui_origin_y,
            parent=self.__body)

    def set_player_mode(self, value):
        self.__video_player.set_mode(value)
        if value == 'Video':
            self.__video_reader.show()
            self.__previousbtn_audio.hide()
            self.__playbtn_audio.hide()
            self.__skipbtn_audio.hide()
        else:
            self.__video_reader.hide()
            self.__previousbtn_audio.show()
            self.__playbtn_audio.show()
            self.__skipbtn_audio.show()

    def end_of_play_list(self):
        print("End of stream")
        self.__palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.__video_reader.setPalette(self.__palette)

    def update_title(self, title):
        self.__videotitle.setText(title)

    def audio_play_pause(self):
        if self.__video_player.is_running():
            self.pause_start()
        else:
            self.__playbtn_audio.setText('Pause')
            self.__video_player.play_stream()

    def video_play_pause(self):
        print("Play pause")
        if self.__video_player.is_running():
            self.pause_start()
        else:
            print("Launching the stream")
            if sys.platform.startswith(
                    'linux'):  # for Linux using the X Server
                self.__video_player.get_player().set_xwindow(
                    self.__video_reader.winId())
            elif sys.platform == "win32":  # for Windows
                self.__video_player.get_player().set_hwnd(
                    self.__video_reader.winId())
            elif sys.platform == "darwin":  # for MacOS
                self.__video_player.get_player().set_nsobject(
                    int(self.__video_reader.winId()))
#TODO LAPALETTE
            self.__video_player.play_stream()
            if self.__video_player.is_playing():
                self.__palette.setColor(QPalette.Window, QColor(255, 255, 255))
                self.__video_reader.setPalette(self.__palette)
                self.__video_reader.setAutoFillBackground(True)

    def pause_start(self):
        if self.__video_player.is_paused():
            print("Unpausing the player")
            self.__playbtn_audio.setText('Pause')
            self.__video_player.resume_stream()
        elif self.__video_player.is_playing():
            print("Pausing the player")
            self.__playbtn_audio.setText('Play')
            self.__video_player.pause_stream()
        else:
            print("Restarting the stream")
            self.__playbtn_audio.setText('Pause')
            self.__video_player.play_stream()

# Redefinition of the QMainWindow built-in methods

    def mousePressEvent(self, event):
        # Left click
        if event.button() == 1:
            if ((event.x() <= (self.__gr_video_reader.getRealWidth() +
                               self.__gr_video_reader.getRealPosX()))
                    and (event.x() >= self.__gr_video_reader.getRealPosX())
                    and (event.y() <= (self.__gr_video_reader.getRealHeight() +
                                       self.__gr_video_reader.getRealPosY()))
                    and (event.y() >= self.__gr_video_reader.getRealPosY())
                    and self.__video_player.get_mode() == 'Video'):

                print("True")
                if self.__video_player.is_running():
                    self.pause_start()
                else:
                    print("Launching the stream")
                    if sys.platform.startswith(
                            'linux'):  # for Linux using the X Server
                        self.__video_player.get_player().set_xwindow(
                            self.__video_reader.winId())
                    elif sys.platform == "win32":  # for Windows
                        self.__video_player.get_player().set_hwnd(
                            self.__video_reader.winId())
                    elif sys.platform == "darwin":  # for MacOS
                        self.__video_player.get_player().set_nsobject(
                            int(self.__video_reader.winId()))


#TODO LAPALETTE
                    self.__video_player.play_stream()
                    if self.__video_player.is_playing():
                        self.__palette.setColor(QPalette.Window,
                                                QColor(255, 255, 255))
                        self.__video_reader.setPalette(self.__palette)
                        self.__video_reader.setAutoFillBackground(True)

        print("Plop X " + str(event.x()) + " Plop Y " + str(event.y()))
        print("Glob X " + str(event.globalX()) + " Glob Y " +
              str(event.globalY()))

    def resizeEvent(self, event):
        print("OLD height: " + str(event.oldSize().height()) + " width: " +
              str(event.oldSize().width()))
        print("NEW height: " + str(event.size().height()) + " width: " +
              str(event.oldSize().width()))
        self.__width = event.size().width()
        self.__height = event.size().height()
        self.__mainbox.resize(event.size().width(), event.size().height())
Esempio n. 25
0
class Ui_VideoWindow(QMainWindow):
    Duration = 0
    Position = 0
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)

        self.photo_label = QtWidgets.QLabel(self)
        self.photo_label.setAlignment(QtCore.Qt.AlignCenter)
        self.photo_label.setGeometry(QtCore.QRect(0, 0, 1024, 631))
        self.photo_label.setText("")
        self.photo_label.setObjectName("photo_label")
        self.photo_label.hide()
        self.photo_label.setStyleSheet("QLabel {background-color: black}")
        self.setWindowTitle("Media Player")
        #QMainWindow.resize(1024, 600)
        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()
        self.resize(1080, 600)

        self.createUI()
        self.isPaused = False

    def createUI(self):
        """Set up the user interface, signals & slots
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        # In this widget, the video will be drawn
        if sys.platform == "darwin":  # for MacOS
            from PyQt5.QtWidgets import QMacCocoaViewContainer
            self.videoframe = QMacCocoaViewContainer(0)
        else:
            self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QPalette.Window, QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)
        self.label = QtWidgets.QLabel(self.videoframe)
        #self.label.setGeometry(QtCore.QRect(0, 0, 1024, 631))
        self.label.setText("")
        self.label.setScaledContents(True)
        self.label.setObjectName("label")

        #         self.positionslider = QSlider(Qt.Horizontal, self)
        #         self.positionslider.setToolTip("Position")
        #         self.positionslider.setMaximum(1000)
        #         self.positionslider.sliderMoved.connect(self.setPosition)
        #
        #         self.hbuttonbox = QHBoxLayout()
        #         self.playbutton = QPushButton("Play")
        #         self.hbuttonbox.addWidget(self.playbutton)
        #         self.playbutton.clicked.connect(self.PlayPause)
        #
        #         self.stopbutton = QPushButton("Stop")
        #         self.hbuttonbox.addWidget(self.stopbutton)
        #         self.stopbutton.clicked.connect(self.Stop)
        #
        #         self.hbuttonbox.addStretch(1)
        #         self.volumeslider = QSlider(Qt.Horizontal, self)
        #         self.volumeslider.setMaximum(100)
        #         self.volumeslider.setValue(self.mediaplayer.audio_get_volume())
        #         self.volumeslider.setToolTip("Volume")
        #         self.hbuttonbox.addWidget(self.volumeslider)
        #         self.volumeslider.valueChanged.connect(self.setVolume)

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.setContentsMargins(0, 0, 0, 0)
        self.videoframe.setStyleSheet(
            "background: black; border: 0px; padding: 0px;")

        self.vboxlayout.addWidget(self.videoframe)
        #         self.vboxlayout.addWidget(self.positionslider)
        #         self.vboxlayout.addLayout(self.hbuttonbox)

        self.widget.setLayout(self.vboxlayout)

        #         open = QAction("&Open", self)
        #         open.triggered.connect(self.OpenFile)
        #         exit = QAction("&Exit", self)
        #         exit.triggered.connect(sys.exit)
        #         menubar = self.menuBar()
        #         filemenu = menubar.addMenu("&File")
        #         #filemenu.addAction(open)
        #         filemenu.addSeparator()
        #         filemenu.addAction(exit)

        self.timer = QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

    def PlayPause(self):
        """Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.playbutton.setText("Play")
            self.isPaused = True
        else:
            if self.mediaplayer.play() == -1:
                #self.OpenFile()
                #                 self.media = self.instance.media_new("/home/pi/Downloads/data/data/Content/DJVHHUAY.mp4")
                #                 # put the media in the media player
                #                 self.mediaplayer.set_media(self.media)
                #
                #                 # parse the metadata of the file
                #                 self.media.parse()
                #                 # set the title of the track as window title
                #                 self.setWindowTitle(self.media.get_meta(0))
                #
                #                  self.mediaplayer.set_xwindow(self.videoframe.winId())

                #                  self.PlayPause()

                return
            self.mediaplayer.play()
            self.playbutton.setText("Pause")
            self.timer.start()
            self.isPaused = False

    def Stop(self):
        """Stop player
        """
        self.mediaplayer.stop()
        self.playbutton.setText("Play")


#     def OpenFile(self, filename=None):
#         """Open a media file in a MediaPlayer
#         """
#         if filename is None:
#             filename = QFileDialog.getOpenFileName(self, "Open File", os.path.expanduser('~'))[0]
#         if not filename:
#             return
#
#         # create the media
#         if sys.version < '3':
#             filename = unicode(filename)
#         self.media = self.instance.media_new(filename)
#         # put the media in the media player
#         self.mediaplayer.set_media(self.media)
#
#         # parse the metadata of the file
#         self.media.parse()
#         # set the title of the track as window title
#         self.setWindowTitle(self.media.get_meta(0))
#
#         # the media player has to be 'connected' to the QFrame
#         # (otherwise a video would be displayed in it's own window)
#         # this is platform specific!
#         # you have to give the id of the QFrame (or similar object) to
#         # vlc, different platforms have different functions for this
#         if sys.platform.startswith('linux'): # for Linux using the X Server
#             self.mediaplayer.set_xwindow(self.videoframe.winId())
#         elif sys.platform == "win32": # for Windows
#             self.mediaplayer.set_hwnd(self.videoframe.winId())
#         elif sys.platform == "darwin": # for MacOS
#             self.mediaplayer.set_nsobject(int(self.videoframe.winId()))
#         self.PlayPause()

    def Path(self, PATH2):
        #PATH2 = "/home/pi/Downloads/data/data/Content/DJVHHUAY.mp4"
        self.mediaplayer.set_media(self.instance.media_new(PATH2))
        self.mediaplayer.set_xwindow(self.videoframe.winId())

    def setVolume(self, Volume):
        """Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def setPosition(self, position):
        """Set the position
        """
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 15)

        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)

    def updateUI(self):
        """updates the user interface"""
        # setting the slider to the desired position
        self.positionslider.setValue(self.mediaplayer.get_position() * 1000)

        #         position = (self.mediaplayer.get_position()* 1000)
        #         print("position", position)

        #         Length = self.mediaplayer.get_length()
        #         print("Length", Length)

        if not self.mediaplayer.is_playing():
            # no need to call this function if nothing is played
            self.timer.stop()
            if not self.isPaused:
                # after the video finished, the play button stills shows
                # "Pause", not the desired behavior of a media player
                # this will fix it
                self.Stop()