2016-03-27 25 views
0

I QPushButton sınıflara bir yolu arıyordum, bu yüzden bağlayabilirsiniz sinyali 'tıklandığında'.Subclassing QPushButton

Sanırım, doğru parametrelerin, CustomButtonClass öğesinin init() dizinine geçirilmesi yeterli, ancak neden ve ne olduğu hakkında hiçbir fikriniz yok. Elimde ne

:

Btn.clicked.connect(lambda: self.func(par)) 

Ayrıca çalışmaz:

class CustomButtonClass(QtGui.QPushButton): 
    def __init__(self, text, parent=None): 
     super().__init__() 

Ben de fark ettim.

Ben QPushButton en mouseReleaseEvent geçersiz ya da benim görevi tamamlamak edebilmek için özel sinyalini oluşturmak zorunda mıyım?

cevap

1

Bir alt sınıf oluşturmanız gerekmez, çünkü PyQt ve PySide zaten bu özelliğe sahiptir (bkz. PyQt belgelerinde Connecting Signals Using Keyword Arguments).

Demo:

>>> from PyQt4 import QtGui 
>>> app = QtGui.QApplication([]) 
>>> btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!')) 
>>> btn.click() 
Hello World! 

hala alt sınıf gerekiyorsa, o zaman tabii ki sadece yapabilirsiniz:

class CustomButtonClass(QtGui.QPushButton): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
+0

Belki benim sorum ... yeterince spesifik olmadığını Eh, gerçekten özel ihtiyaç alt sınıf, çünkü düğmelerim için ekstra biçimlendirme ve işlevlere ihtiyacım var. Ama cevabımla aklıma gelen bir fikir var, QPushButton mouseReleaseEvent'i uygulamaya özel yönergelerimle geçersiz kılabiliyorum ... Çok teşekkür ederim! :) –

+0

@ KrzysiekŁuczak. Böyle bir şey yapmaya gerek yok - cevabım hala işe yarayacak. Ne demek istediğimi göstermek için biraz daha kod ekledim. – ekhumoro

+0

Geç cevap, ama ... Benim durumumda, ben, ardışık * args ve __init __() argümanlar içinde kwargs özledim –