pyqt4不同類之間訊號與槽進行連線
阿新 • • 發佈:2018-12-17
這個部落格是自己在使用pyqt4過程中,解決具體的總結,僅供個人備忘。
不同類之間訊號與槽的對應,需要三個步驟:
1)在類A裡定義發射訊號,使用emit()方法,發射訊號A_signal();
2)在類B裡定義槽函式B_slot();
3)在主函式main()裡,使用類A、B分別例項化兩個物件a、b。
然後使用connect(a, QtCore.SIGNAL('A_signal()'), b.B_slot)
下面是一個例子
程式描述:定義了一個按鈕和一個顯示部件,通過點選按鈕控制顯示部件進行顯示。
所給出的程式碼不完整。
首先是按鈕程式碼:
class Buttontest(QtGui.QWidget): def __init__(self): super(Buttontest, self).__init__() self.initUI() def initUI(self): self.buttont = QtGui.QPushButton('Start', self) self.connect(self.buttont, QtCore.SIGNAL('clicked()'), self.totestbutton) def totestbutton(self): self.emit(QtCore.SIGNAL('buttontest()'))
然後是顯示部件:
class Buttonshowfeature(QtGui.QWidget): def __init__(self): super(Buttonshowfeature, self).__init__() self.initUI() def initUI(self): self.paintarea = Paintarea() def topaintonarea(self): self.paintarea.emit(QtCore.SIGNAL('startpaint()')) class Paintarea(QtGui.QWidget): def __init__(self): super(Paintarea, self).__init__() self.setGeometry(300, 300, 280, 270) self.setWindowTitle('penstyles') self.setPalette(QPalette(Qt.white)) self.setAutoFillBackground(True) self.setMinimumSize(100,50) self.data_idx2d = 1 self.paintbool = False self.connect(self, QtCore.SIGNAL('startpaint()'), self.tochangepaint) # # qp.end() def tochangepaint(self): # This function is called when the view is opened. self.paintbool = True self.update() def paintEvent(self, e): if self.paintbool == True: qp = QtGui.QPainter() qp.begin(self) self.test_plot2d(qp) qp.end() def test_plot2d(self, qp): dataidx = self.data_idx2d + 1#get_idx() # print('Visualization2d: The 2d loop number is: ', dataidx) _, pcfiture = showpc.dataset_viz2d(dataidx) # print('The length of pcfiture is: ', len(pcfiture)) pen = QtGui.QPen(QtCore.Qt.blue, 2, QtCore.Qt.SolidLine) qp.setPen(pen) for i in range(len(pcfiture)): x = 20 + i y = 100 - 5*pcfiture[i]#40*(1 + pcfiture[i]) qp.drawLine(x, y, x, 100)
最後是main函式裡的呼叫程式碼:
te1=Buttonshowfeature()
te2=Buttontest()
self.connect(te2, QtCore.SIGNAL('buttontest()'), te1.topaintonarea)
經測試可以達到想要的效果。