7
votes

Pyqt4, comment ajouter un lot de widget (qpushbutton) à la fois et les laisse exécuter sur la fente

Si je veux ajouter 10 qpushbutton à la fois: xxx

comme indiqué dans le défaut (BTNClick).


0 commentaires

4 Réponses :


3
votes

Lorsque vous êtes dans une fente, vous pouvez utiliser la méthode de l'expéditeur () (appelez simplement Self.sender ()) et vous recevrez une référence à l'objet, à partir duquel un signal a été émis. ici est la documentation à ce sujet.


0 commentaires

2
votes

Je serais sous-classe qpushbutton et définir mon propre expéditeur et emplacement. La méthode qobject.sender () est tentante, mais cela me donne les Heebie-Jeebies. XXX

Un moyen légèrement plus pythonique de cela pourrait définir le comportement dans la classe, comme: xxx


2 commentaires

Sérieusement, il n'y a rien de mal avec l'expéditeur (). Je l'ai utilisé beaucoup et ça marche très bien. Cependant, il faut utiliser des soins. J'utilise habituellement votre méthode lorsque vous signalez l'externe (c'est-à-dire à d'autres objets) mais l'expéditeur () lorsque vous acheminez des signaux dans une classe.


Il n'y a peut-être rien de mal avec .sender (), mais comme la documentation le dit, cela "violent le principe de modularité orienté objet". Ce qui ne serait pas la mort de personne, certes. Je pourrais être tenté de l'utiliser en tant que correction "rapide" et sale ". Mais Python rend si facile de faire mieux et plus propre, il est probablement préférable de le faire correctement, à long terme.



1
votes

Comme le dit GruszCsy, il y a soi-même. expéditeur () ( à QObject) pour obtenir cette information exacte.

Il y a aussi le QsignalMapper classe qui fournit un mappage de niveau supérieur de plusieurs expéditeurs de signal à une fente. Il aide les cas de base de la cartographie des signaux de plusieurs-un ou des machines à sous.

suggestion de Chris B sur la définition d'une nouvelle fente qui transmet l'expéditeur sous forme de paramètre est un peu plus compliquée, mais plus propre en termes de structure de programme et de séparation entre les classes. J'ai tendance à utiliser cette méthode lorsque la fente cible est dans un autre objet. Pour la cartographie dans la fente privée d'une classe, l'expéditeur () est à la fois propre et bien approprié, imo.


0 commentaires

0
votes

Voici une petite application démontrant une solution possible: xxx

Veuillez apprécier :)


0 commentaires