2016-03-21 20 views
0

PyQt'yi kullanıyorum ve sinyal yuvası mekanizmasını anlamaya çalışıyorum. Ne yazık ki, PyQt belgeleri genellikle sözdizimi ve parametrelerinin neredeyse aynı olmadığı Qt sayfalarına yol açar. Aşağıdaki basit örnekte 2 şeyi anlamaya çalışıyorum.PyQt5 sinyal ve yuvası basit kod açıklaması

1) QAction :: triggered() bir void işlevidir, bu nedenle QRction :: triggered.connect() yöntemini, triggered() yöntemi ile teorik olarak döndürülen bir nesne türünde nasıl çağırıyoruz.

2) Ve "qApp" nedir. Ne tür qApp olduğunu veya PyQt tarafından oluşturulduğunu bilmiyorum ama bana uygun bir yerde kullanılmak üzere, hiçbir yerde görünmüyor gibi görünüyor.

Yanlış anlaşılmamın bir kısmı, C++ ve python'un Qt/PyQt işlevlerinin aynı olmadığı gerçeğinden kaynaklanıyor, ancak herhangi bir python belgesi olmadan neler olup bittiğini anlamamız bekleniyor.

import sys 
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication 
from PyQt5.QtGui import QIcon 


class Example(QMainWindow): 

    def __init__(self): 
     super().__init__() 

     self.initUI() 


    def initUI(self): 

     exitAction = QAction(QIcon('exit24.png'), 'Exit', self) 
     exitAction.setShortcut('Ctrl+Q') 
     exitAction.triggered.connect(qApp.quit) 

     self.toolbar = self.addToolBar('Exit') 
     self.toolbar.addAction(exitAction) 

     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Toolbar') 
     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

cevap

1

1 /: otomatik bir sinyal bağlamak Senin durumunda adanmış callback'inde argümanlar taşımak sözdizimi, hiçbir tartışma yoktur. Size geri çağırma mekanizmasını göstermek için kodunuzu basitleştiriyorum

2 /: QApp, Qapplication örneğinizin bir tür kısayoludır. Aşağıdaki örnekte olduğu gibi QApplication örneğinizle değiştirebilirsiniz. QApplication documentation den

Özü

QApplication nesnesi, genel qApp işaretçi için bir işaretçi eşdeğer döner örneği() fonksiyonu sayesinde ulaşılabilir.

Genel qApp işaretçisi, bu uygulama nesnesini ifade eder. Sadece bir uygulama nesnesi oluşturulmalıdır.

import sys 
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication 

class Example(QMainWindow): 
    def __init__(self): 
     super(Example, self).__init__() 
     exitAction = QAction('Exit', self) 
     exitAction.triggered.connect(self.this_call) 
     self.toolbar = self.addToolBar('Exit') 
     self.toolbar.addAction(exitAction) 
     self.show() 

    def this_call(self): 
     print('bye bye') 
     app.quit() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_())