Python + Qt + OpenCV = problème :/ - Python - Programmation
Marsh Posté le 27-10-2011 à 21:37:34
_pollux_ a écrit : Le problème : quand j'appuye sur le bouton pour afficher la webcam, j'ai une fenètre qui pop-up, alors que je pensais que la widget serait incluse dans la MainWindow |
Salut
Bon moi je connais bien PyQt mais je ne connais pas OpenCV. Je viens d'aller voir sur le net ce que ça fait mais comme j'ai jamais programmé avec...
Le pb c'est que ta fenêtre ecran.widget_3 (qui s'affiche quand on appuie sur le bouton) n'est pas incluse dans la fenêtre principale. Ce n'est pas parce que tu lui donnes "self.centralwidget" comme parent que cela suffit. Il te faut créer un gestionnaire de disposition (un layout) et lui donner comme enfant la widget en question. Ensuite, ton bouton sert juste à la rendre visible ou pas.
Autre chose: personnellement j'utilise à fond les classes. Ca permet d'avoir des éléments vraiment indépendants. Et j'éviterais, si j'étais toi, de passer par designer. Ca n'aide pas à bien comprendre Qt...
Voici un petit exemple de démo de ce que j'imagine que tu veux faire: une fenêtre principale avec un bouton "webcam" qui affiche ou masque une sous-fenêtre. Je l'ai développé intégralement selon ma façon de faire générale
Code :
|
Donc tu vois, j'ai créé un objet dédié à l'affichage de la webcam. N'ayant pas opencv je n'y ai mis qu'un bouton et un texte mais c'est l'avantage de l'indépendance => il peut évoluer facilement sans toucher au reste de l'appli
L'élément "ihm" n'est pas obligatoire mais je l'aime bien. Il s'agit d'un petit dictionnaire que j'embarque dans tous mes objets Qt. Ainsi, chaque objet connait
- son parent
- l'objet "application" et tout ce qui va avec
_pollux_ a écrit : Autre problème de compréhension : la fonction paintevent déclarée dans la construction de la classe Video_widget n'est jamais utilisée, je ne comprends donc pas à quoi elle sert |
J'en sais rien. C'est le pb quand on utilise designer => beaucoup de trucs qui sont intégrés (qui doivent être utiles) mais dont on ne perçoit pas l'utilité au premier abord...
Marsh Posté le 27-10-2011 à 21:56:51
merci pour la réponse, je vais potasser tout ça
Marsh Posté le 28-10-2011 à 10:47:26
J'ai potassé, ça marche, tu m'as rendu un grand service, merci pour tout
Va vraiment falloir que j'apprenne les bases pour être capable de coder tout ça moi même
Marsh Posté le 30-10-2011 à 09:09:22
Bonjour,
Je reviens à la charge.
En reprenant l'exemple précédent, je veux créer un bouton dans l'objet Appli qui aurait un effet sur la vidéo de l'objet webcam.
Le problème, c'est que si je crée une fonction "aspect_video" un peu n'importe où, quand je l'appelle, il me sort que l'objet webcam n'a pas d'attribut __video.
Alors que si je fais la même action en utilisant un bouton crée dans la classe de webcam, ça marche ...
Code :
|
J'ai volontairement viré quelques trucs pour plus de visibilité...
Marsh Posté le 30-10-2011 à 20:41:18
_pollux_ a écrit : Bonjour, |
Personnellement je mettrais le bouton directement dans l'objet webcam !!!
Mais sinon c'est possible. Tu mets dans l'objet webcam un slot "xxx" et tu relies le bouton de l'appli au slot xxx de l'objet webcam.
Ou alors, tu te la joues pro qt à fond et tu relies ton bouton de l'appli à l'émission d'un signal par l'application. Puis tu connectes le signal de l'application au slot xxx de ton objet webcam...
_pollux_ a écrit : Le problème, c'est que si je crée une fonction "aspect_video" un peu n'importe où, quand je l'appelle, il me sort que l'objet webcam n'a pas d'attribut __video. |
Le double underscore d'une variable ou une méthode rend la variable ou méthode privée à la classe. Et donc aucun élément extérieur à la classe ne pourra accéder à la variable ou méthode en question...
_pollux_ a écrit :
|
L'avantage de créer des objets indépendants c'est aussi de pouvoir éviter les variables globales. Tu mets tes variables dans la classe QtAppli et grâce à l'élément "ihm" tu peux accéder à l'objet "QtAppli" et à ses variables...
Marsh Posté le 30-10-2011 à 20:45:16
Sve@r a écrit : |
le problème, c'est que si je le mets dans l'objet webcam, le bouton n'apparaîtra que si je montre l'objet ?
Sve@r a écrit : |
putain, je savais même pas ça (c'est nul d'être débutant -_-)
Marsh Posté le 30-10-2011 à 20:46:16
Sve@r a écrit : |
Ouaip, je dois avouer que j'ai pas encore eu le temps de penser à tout ça. (mais je suivrai ton conseil)
Marsh Posté le 30-10-2011 à 21:03:09
_pollux_ a écrit : |
c'était la cause de tous mes problèmes
Marsh Posté le 31-10-2011 à 11:06:33
_pollux_ a écrit : |
Tout à fait. Tu commences à comprendre les principes Qt. A toi de voir si ça t'arrange ou pas...
_pollux_ a écrit : |
On l'a tous été mais ça s'arrangera...
Marsh Posté le 13-11-2011 à 00:57:42
Sve@r a écrit : Le double underscore d'une variable ou une méthode rend la variable ou méthode privée à la classe. |
Ça fait juste du name mangling, donc on peut y accéder si on veut
Mais plus important, c'est pas à utiliser pour de la visibilité, ça existe pour des contextes d'héritage, histoire de pas se faire écraser des variables par des classes enfant.
Marsh Posté le 27-10-2011 à 19:56:28
bonjour
J'essaye d'interfacer OpenCV avec Qt (pyside) sous python pour afficher ma webcam dans une fenêtre de contrôle.
J'ai trouvés des bouts de code pour m'aider. Je précise que je suis débutant en python/Qt/OpenCV (en programmation tout court aussi )
Mon problème est d'afficher la webcam non pas dans une fenêtre qui pop-up, mais dans la fenêtre de contrôle initiale
Le code qui j'utilise est le suivant :
Le problème : quand j'appuye sur le bouton pour afficher la webcam, j'ai une fenètre qui pop-up, alors que je pensais que la widget serait incluse dans la MainWindow
Autre problème de compréhension : la fonction paintevent déclarée dans la construction de la classe Video_widget n'est jamais utilisée, je ne comprends donc pas à quoi elle sert
Message édité par _pollux_ le 27-10-2011 à 20:04:00
---------------
Le topic du sport électronique@hfr : watch the l33t !