IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Problème de bordure blanche avec QWebEngineView..


Sujet :

PyQt Python

  1. #1
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut Problème de bordure blanche avec QWebEngineView..
    Bonjour,
    Je suis en train de m'essayer à intégré une vidéo YouTube dans une fenêtre pour mon programme cependant je rencontre un problème d'ordre esthétique, du à un problème de géométrie des widgets?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    from PyQt5 import QtWidgets, QtCore, QtGui, QtWebEngineWidgets, QtWebEngineCore
    import sys
     
    app = QtWidgets.QApplication(sys.argv)
     
    url = "https://www.youtube.com/watch?v=v_gkjTt45gY"
    htmlString = f"<iframe width='1120' height='630' src={url.replace('watch?v=', 'embed/') + '?autoplay=1&rel=0'} frameborder='0' ></iframe>"
    embedVideo = QtWebEngineWidgets.QWebEngineView(windowTitle="...")
     
    embedVideo.setHtml(htmlString)
    embedVideo.setFixedSize(1140, 650)
     
    embedVideo.show()
    app.exec_()
    et j'obtient ça :
    Nom : tempo.png
Affichages : 342
Taille : 918,2 Ko
    ps: j'ai pris la première url qui m'est passée sous la main

    J'ai une bordure de 8px en haut & gauche et 12px en bas & droite ...
    après 2h à éplucher des docs/forums/recherches Google infructueuses j'ai tenté d'utiliser un QDialog, un QWidget, un QLayout avec setContentsMargin, setContentsMargin sur le QWebEngineView, et plein d'autres tentatives, j'ai tenté des styleSheets dans tous les sens mais alors là je sèche .. Rien n'y fait j'ai une bordure blanche de ***** ...

    D'ailleurs même avec le flags QtCore.Qt.FramelessWindowHint la bordure est présente..
    le problème ne viens pas de non plus de embedVideo.setFixedSize(1140, 650), quand je la désactive la fenêtre est redimensionnable mais il y à toujours les bordures ...
    Si quelqu'un peut m'éclairer
    Merci d'avance !

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut
    Bonjour,

    Il me semble que setContentsMargin remplace setmargin.

    De mémoire, il existe aussi un un setspacing.

    Avez vous essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    embedVideo.setFixedSize(1140, 650)
    embedVideo.setMargin(0) #  Normalement remplacé par embedVideo.setContentsMargins(0,0,0,0)
    embedVideo.setSpacing(0)

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 465
    Points : 9 257
    Points
    9 257
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà un autre code qui affiche une vidéo youtube en plein écran et sans entourage (Python 3.5, PyQt5 5.9, Windows 10):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt5 import QtWidgets, QtCore, QtWebEngineWidgets
     
    if __name__ == '__main__':
     
        app = QtWidgets.QApplication(sys.argv)
     
        page = QtWebEngineWidgets.QWebEnginePage()
        page.setUrl(QtCore.QUrl("https://www.youtube.com/tv#/watch?v=2i1839OxhY4"))
     
        view = QtWebEngineWidgets.QWebEngineView()
        view.setPage(page)
        view.resize(1024, 768)
        view.show()
     
        sys.exit(app.exec_())
    La vidéo en exemple est celle de la jeune colombienne "Drea Dury" qui a été vue dans "The Voice".
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Merci de vos réponses, killian68 j'avais déjà tenté ces possibilités et aucune ne marchait.

    du coup je me suis un peu pas mal inspiré de l'exemple de tyrtamos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def watch_youtube_from_url(url):
    	global page, view
    	page = QtWebEngineWidgets.QWebEnginePage()
    	page.setUrl(QtCore.QUrl(url.replace("watch?v=", "embed/") + "?autoplay=1&rel=0"))
    	view = QtWebEngineWidgets.QWebEngineView()
    	view.setPage(page)
    	view.resize(1024, 768)
    	view.show()
    Après question de gout, je préfère utiliser youtube.com/embed/... que youtube.com/tv#/....


    edit : avec cette technique l'audio ne se coupe pas ..

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu n'utilises jamais de layout ?

    Ce sera un peu plus propre de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    class VideoViewer(QtWidgets.QMainWindow):
        def __init__(self):
            super().__init__()
            # Taille de départ ça reste dimensionnable
            self.resize(1500, 750)
            self.centralwidget = QtWidgets.QWidget(self)
            self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
            # la fameuse bordure
            self.gridLayout.setContentsMargins(0, 0, 0, 0)
            self.page = QtWebEngineWidgets.QWebEnginePage()
            self.view = QtWebEngineWidgets.QWebEngineView()
            self.view.setPage(page)
            self.gridLayout.addWidget(self.view, 0, 0, 1, 1)
            ....
     
        def set_url(self, url):
            self.page.setUrl(url)

  6. #6
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Finalement voila mon code final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class WatchYoutubeFromUrl(object):
    	def __init__(self, mainWindow, url, title):
    			windowView = QtWidgets.QDialog(mainWindow, modal=True, windowTitle=title)
    			layout = QtWidgets.QGridLayout(windowView)
    			layout.setContentsMargins(0, 0, 0, 0)
    			page = QtWebEngineWidgets.QWebEnginePage()
    			page.setUrl(QtCore.QUrl(url.replace("watch?v=", "embed/") + "?autoplay=1&rel=0"))
    			view = QtWebEngineWidgets.QWebEngineView()
    			layout.addWidget(view)
    			view.setPage(page)
    			view.resize(1280, 720)
    			windowView.show()
    			windowView.exec_()
    Merci à tous, sujet résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de bordure avec JTextField
    Par Baptiste Wicht dans le forum Composants
    Réponses: 2
    Dernier message: 12/06/2009, 13h59
  2. Réponses: 4
    Dernier message: 02/08/2008, 18h34
  3. problème de bordure avec les tables sous IE
    Par Silvia12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 28/09/2007, 10h45
  4. Problème de page blanche sur navigation avec html:link
    Par assistibm dans le forum Struts 1
    Réponses: 7
    Dernier message: 13/07/2007, 13h31
  5. Problème de Bordure en CSS, avec I.E
    Par Stitchover dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 25/04/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo